在 UIWebView 上加载 javascript

Posted

技术标签:

【中文标题】在 UIWebView 上加载 javascript【英文标题】:Loading javascript on UIWebView 【发布时间】:2015-03-18 10:57:47 【问题描述】:

我有一个javascript,只是想把它加载到我的UIWebView 上,不知道我做错了什么。 这是我的脚本:

<script type='text/javascript'>(function ()  var done = false; var script = document.createElement('script'); script.async = true; script.type = 'text/javascript'; script.src = 'https://app.purechat.com/VisitorWidget/WidgetScript'; document.getElementsByTagName('HEAD').item(0).appendChild(script); script.onreadystatechange = script.onload = function (e)  if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))  var w = new PCWidget( c: 'ea5935c8-1f44-4172-bcd7-18d6f316ad75', f: true ); done = true;  ; )();</script>

这是我的代码:

NSString *temp =@"<script type='text/javascript'>(function ()  var done = false; var script = document.createElement('script'); script.async = true; script.type = 'text/javascript'; script.src = 'https://app.purechat.com/VisitorWidget/WidgetScript'; document.getElementsByTagName('HEAD').item(0).appendChild(script); script.onreadystatechange = script.onload = function (e)  if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))  var w = new PCWidget( c: 'ea5935c8-1f44-4172-bcd7-18d6f316ad75', f: true ); done = true;  ; )();</script>";
    
[_mainWebView stringByEvaluatingJavaScriptFromString:temp];

这是我的空白webView...:(

【问题讨论】:

【参考方案1】:

您不需要在 javascript 中包含 script 标签。 stringByEvaluatingJavaScriptFromString 尝试直接在 webview 中执行给定的 javascript 字符串。

试试这个方法:

NSString *temp =@"(function ()  var done = false; var script = document.createElement('script'); script.async = true; script.type = 'text/javascript'; script.src = 'https://app.purechat.com/VisitorWidget/WidgetScript'; document.getElementsByTagName('HEAD').item(0).appendChild(script); script.onreadystatechange = script.onload = function (e)  if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))  var w = new PCWidget( c: 'ea5935c8-1f44-4172-bcd7-18d6f316ad75', f: true ); done = true;  ; )();";

【讨论】:

@AyanKhan 你在调用这个javascript之前加载了webview吗?它有内容还是空白? 我正在这样做:[mainWebView stringByEvaluatingJavaScriptFromString:temp]; [self.view addSubview:mainWebView]; 这是javascript执行后的html dom。似乎其中一个脚本文件的 src 是错误的。检查 WidgetScript 的第 45 行 &lt;html&gt; &lt;head&gt; &lt;script async="" type="text/javascript" src="https://app.purechat.com/VisitorWidget/WidgetScript"&gt;&lt;/script&gt;&lt;script async="" type="text/javascript" src="https://app.purechat.com/VisitorWidget/WidgetVersions/ea5935c8-1f44-4172-bcd7-18d6f316ad75/_WidgetJPCB0"&gt;&lt;/script&gt;&lt;script async="" type="text/javascript" src="undefined/VisitorWidget/Widget/ea5935c8-1f44-4172-bcd7-18d6f316ad75/undefined/_WidgetJPCB1.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;/body&gt; &lt;/html&gt;

以上是关于在 UIWebView 上加载 javascript的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 在 iPhone 设备上很慢,在模拟器上很快

iOS 应用上的 OAuth2 加载 uiwebview 以让用户接受连接

检测 UIWebView 何时加载引用文件失败

UIWebView 新增 Url 加载动画效果

加载后快速获取 UIWebView 的正确大小

如何在 UIWebView 加载的 iframe 中注入 javascript - iOS