WKWebview javascript在模拟器上工作,但如果视图不在屏幕上,则不能在设备上工作
WKWebview javascript works on simulator but doesn't work on device if the view isn't on the screen
我使用WKWebview来运行javascript脚本。
我没有使用JSContext等,因为我需要javascript上下文能够执行XHTTP请求,这是单独使用JSContext无法实现的。
这个视图没有添加到视图层次结构中,我没有兴趣这样做。
WKWebview仅用于在其引擎中运行JS代码的能力。
javascript代码在模拟器上完全按照预期工作。
完全相同的代码也可以在我测试过的某些其他应用程序的上下文中工作。
但是由于某些原因,在某些应用程序中,WKWebview不会执行javascript,除非将WKWebview添加到视图层次结构中。下面的代码将按预期工作。如果删除#warning代码,将按预期停止工作
-(void)connect {
//TODO: Handle multiple connect calls
WKUserContentController *userContentController = [WKUserContentController new];
[self addScriptMessageHandlersForSocketEvents:userContentController];
NSString *socketFileContent = [self.class socketIOScript];
WKUserScript *socketIOScript = [[WKUserScript alloc] initWithSource:socketFileContent
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly:NO];
[userContentController addUserScript:socketIOScript];
NSString *bridgeJs = [self.class bridgeScript];
WKUserScript *bridgeScript = [[WKUserScript alloc] initWithSource:bridgeJs
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly:NO];
[userContentController addUserScript:bridgeScript];
NSMutableDictionary *d = [NSMutableDictionary new];
for (NSURLQueryItem *item in _parameters) {
d[item.name] = item.value;
}
NSString *params = json(d);
NSString *socketURLScript = [NSString stringWithFormat:@"createSocket(%@,%@);log('created script')",stringify(_url),params];
WKUserScript *createSocket = [[WKUserScript alloc] initWithSource:socketURLScript
injectionTime:WKUserScriptInjectionTimeAtDocumentEnd
forMainFrameOnly:NO];
[userContentController addUserScript:createSocket];
WKWebViewConfiguration * wkconfiguration = [WKWebViewConfiguration new];
wkconfiguration.userContentController = userContentController;
_wv = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 0, 0) configuration:wkconfiguration];
#warning REMOVE THIS AND THE WKWebview stops working on some devices (NOT ALL DEVICES) and works in some applications as expected
[[UIApplication sharedApplication].keyWindow addSubview:_wv];
// END REMOVE THIS
_wv.navigationDelegate = self;
dispatch_group_enter(_loadedSemaphore);
[_wv loadHTMLString:@"<h1></h1>" baseURL:nil];
}
您是否实现了WKWebView的所有委托方法?
相关文章:
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 当屏幕宽度减小时,Bootstrap Form下拉菜单停止工作
- 内容赢得'在Bootstrap中无法在不同的屏幕大小上工作
- 只有当屏幕大小为一定宽度时,才希望该功能工作
- window.open()没有'无法在添加到主屏幕的移动Safari web应用程序中工作
- 如何修复网络中的屏幕大小为BB 10应用程序工作
- ionios应用程序卡在启动屏幕上-在模拟器中工作,而不是在iphone5s设备上
- 当屏幕关闭时,HTML5音频/javascript在android(谷歌chrome)上停止工作
- 正在尝试查找javascript元素's在屏幕上的位置..在webkit浏览器上无法正常工作
- 谷歌Chrome-使用iframe时屏幕捕获失败,相同的脚本在没有iframe的情况下也能工作
- zsliderjavascript应该只能在768px以下的屏幕分辨率下工作
- Phonegap的工作屏幕截图插件
- 如何使Javascript/jQuery键事件与屏幕阅读器一起工作
- Jquery代码像媒体屏幕一样工作
- Web RTC屏幕共享不工作在Chrome
- Jquery show hide在大屏幕上不能正常工作.而且在移动设备上完全不起作用
- 加载屏幕JavaScript不工作
- WKWebview javascript在模拟器上工作,但如果视图不在屏幕上,则不能在设备上工作
- 无法让haxe-pixi.js工作-我得到一个空白的白色屏幕
- Jira 日志工作屏幕扩展 - 单击日志工作时的自定义 JavaScript 代码