每次加载新页面时,在iOS webView中运行JS
Run JS in iOS webView every time loading a new page
例如,我想在每次用户单击UIWebView中的新链接时运行这部分代码,
NSString* js =
@"var meta = document.createElement('meta'); "
"meta.setAttribute( 'name', 'viewport' ); "
"meta.setAttribute( 'content', 'width = device-width;initial-scale=1.0; maximum-scale=1.0' ); "
"document.getElementsByTagName('head')[0].appendChild(meta)";
[webView stringByEvaluatingJavaScriptFromString: js];
我该怎么做?我应该查看哪个 API?我希望这个JS在新页面中运行。我应该如何确定新页面是否已完全加载?–
在这种情况下,
有两件事可能会出错:1) 你的 Js 抛出一个异常,2) 页面在 Js 运行后重新加载,因此重置你的脚本的效果。
根据我的经验,当Javascript似乎没有在UIWebView
中运行时,几乎总是Javascript抛出异常。
尝试将脚本括在try { ... } catch { ... }
以捕获异常:
NSString* js =
@"try {"
"var meta = document.createElement('meta'); "
// [rest of the script...]
"document.getElementsByTagName('head')[0].appendChild(meta)";
" } catch (exc) { "
" window.ERR = exc.toString(); "
" } "
现在,您可以在调用 stringByEvaluatingJavaScriptFromString:
后在 Xcode 中设置断点。如果运行,则可能会出现错误消息
po [webView stringByEvaluatingJavaScriptFromString:@"window.ERR"]
在调试提示中。
当你在UIWebView
上尝试Javascript时,一个好主意是首先进行探索性。使用Chrome开发人员工具之类的工具来清除最严重的错误(例如语法错误)。如果您的代码在那里工作,下一步是使用适用于 iOS 的 Safaris Web 检查器,看看它是否仍然执行应有的操作。
@nilveryboring的观点是,您在webViewDidFinishLoading
而不是shouldStartLoadWithRequest
中添加脚本是正确的。shouldStartLoadWithRequest
页面尚未加载,此时引入的任何状态都将被加载页面丢弃。
您可以检测用户何时单击具有以下内容的链接:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
一旦你检测到他点击了一个链接,执行你的js。
有关它的更多信息,请参阅文档。
相关文章:
- 在WebView iOS中评估Javascript
- WebView中的Html页不会激发'可见性更改'用户按下主页按钮时的事件(iOS 8)
- Ios webview调用javascript函数将不起作用
- 使用键盘 HTML 时 WebView Focus 的 iOS 7 问题
- iOS webview 将 var 发送到 javascript html 文件
- Facebook喜欢按钮未显示在WebView(iOS和Android)中
- 每次加载新页面时,在iOS webView中运行JS
- 在Webview iOS中注入JavaScript代码
- Google Analytics无法在iOS应用程序的Webview中工作
- 如何在iOS上移除Ionic Webview顶部的空间
- 模拟点击在iOS的webview与按钮
- 我们可以从javascript页面导航到ios WebView页面吗?
- 如何从iOS调用WebView中的JavaScript
- Ios用javascript在webview中填充来自objective c的值
- 使用YouTube's iFrame播放器在iOS webview中渲染内联视频
- iOS WebView保存图像无需下载
- iOS应用程序中的webview-诱骗应用程序进入思考页面已重新加载
- 未触发从Javascript向iOS Webview委托的调用
- Android/iOS WebView未遵循CORS HTTP重定向(30x)
- Webview与本机iOS应用程序通信的任何方式