提问人:wdyz 提问时间:1/16/2021 更新时间:1/17/2021 访问量:127
在 objective-C 中从 UIWebView 迁移到 WKWebView 后无法加载本地 JS 文件
Can't load local JS file after migrate from UIWebView to WKWebView in objective-C
问:
我有这样的UIWebView:
#import <UIKit/UIKit.h>
#import "DataProvider.h"
@implementation QHArticle
{
UIWebView *_helperWebView;
}
-(instancetype)init
{
self = [super init];
if (self)
{
_helperWebView = [[UIWebView alloc] init];
[_helperWebView loadHTMLString:@"<html><script src='Article.js'></script><body onload='Article.init();'></body></html>" baseURL:[[NSBundle mainBundle] bundleURL]];
}
return self;
}
-(NSString*)callJSMethod:(NSString*)method
{
return [_helperWebView stringByEvaluatingJavaScriptFromString:method];
}
-(NSArray *)listArticle
{
NSString *json = [self callJSMethod:@"(function() {return JSON.stringify(Article._data.news)})()"];
;
NSError *error;
NSArray *result = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error];
return [result subarrayWithRange:NSMakeRange(1, result.count-2)];
}
当我尝试时,上面的代码工作正常。但是,在代码更改为 WKWebView 后,如下所示:
#import <UIKit/UIKit.h>
#import <WebKit/WebKit.h>
#import "DataProvider.h"
@implementation QHArticle
{
WKWebView *_helperWebView;
}
-(instancetype)init
{
self = [super init];
if (self)
{
_helperWebView = [[WKWebView alloc] init];
[_helperWebView loadHTMLString:@"<html><script src='Article.js'></script><body onload='Article.init();'></body></html>" baseURL:[[NSBundle mainBundle] bundleURL]];
}
return self;
}
- (NSString *)callJSMethod:(NSString *)method
{
__block NSString *resultString = nil;
__block BOOL finished = NO;
[_helperWebView evaluateJavaScript:method completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
}
} else {
NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
}
finished = YES;
}];
while (!finished)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;
}
我收到一条错误消息,“evaluateJavaScript 错误:....找不到文章对象“,并在手机上出现白色空白屏幕。 将其迁移到 WKWebView 后,我仍然找不到问题,请帮忙。 我只想使用 Objective-C,而不是 Swift,因为这是遗留代码。
谢谢。
答:
1赞
Greg Ball
1/17/2021
#1
WKWebView 不会从 URL 加载任何内容。file://
首先将脚本加载到字符串中;你可以用它来运行它。Article.js
evaluateJavaScript:
要将字符串注入到特定 WKWebView 加载的每个页面中,您需要创建一个 ,将其附加到 ,并将 THAT 附加到 .WKUserScript
WKUserContentController
WKWebViewConfiguration
然后使用[WKWebView initWithFrame:configuration:]
评论
0赞
wdyz
1/18/2021
你能给我举个例子吗?我想加载javascript和listArticle可以成功运行。
评论