【问题标题】:Inconsistent execution of executeScript in Cordova inAppBrowser on iOSiOS上Cordova inAppBrowser中executeScript的执行不一致
【发布时间】:2016-08-23 00:04:32
【问题描述】:

我在我的 cordova 应用程序中遇到了一些 inAppBrowser 行为的问题。代码如下:

var codePass = fooCode;
var executeScriptFunc = function(event) { 
  ref.executeScript({
    code: codePass
  }, function (value) {});
  ref.removeEventListener('loadstop', executeScriptFunc);
};

var ref = cordova.InAppBrowser.open(fooObject.link, "_blank", "location=yes,enableViewportScale=yes");
ref.addEventListener('loadstop', executeScriptFunc)

这里的奇怪之处在于代码在每次模拟时都能完美运行。它打开浏览器并执行脚本没问题。但是当我在我的实际 iPhone 设备上试用它时,它并不总是有效。该脚本可能每隔一段时间执行一次。但它从未如此一致。

模拟器和 iPhone 都使用 iOS 9.3.4。有什么想法吗?

【问题讨论】:

  • 在尝试进一步诊断这一点时,我发现 loadstop 侦听器也在退出时被触发。这不会在模拟器中发生,仅在设备上发生,并且仅在 iOS 上发生,在本例中为 9.3.4。与 loadstart 类似的行为,但 exit 似乎工作正常。
  • 好的,我有一个解决方法,但并不理想。当我删除 cordova-plugin-wkwebview-engine 插件时,它似乎每次都在 iOS 设备上工作。鉴于这有助于优化应用程序,这似乎不是一个很好的场景。 WKWebView 似乎是问题所在,因此可能与CB-11136CB-10698 有关。

标签: javascript ios cordova cordova-plugins inappbrowser


【解决方案1】:

如果 inAppBrowser 中的站点碰巧通过 HTTPS 提供服务,如果站点使用不包含 gap:gap-iab: 方案的 Content-Security-Policy HTTP 响应标头,则 executeScript() 的回调将不起作用default-src 指令。这些是必需的,因为execution of the callback function on iOS relies on an iframe that gets added to the page

您可以通过为 inAppBrowser 打开 Safari 的 Web Inspector 来检查这是否是问题的根本原因——它有一个单独的 Web Inspector 实例,独立于打开它的父应用程序——并在控制台。请注意,您应该在运行executeScript() 之前打开控制台,否则您可能不会收到错误消息。

【讨论】:

  • 什么'相应的错误信息'?这是内容安全策略警告吗?
【解决方案2】:

还要确保在轮询期间没有其他事件处理程序同时触发。

我有多个轮询器每秒都在触发,这就是我遇到问题的时候。

更改轮询时间后,他们都在不同的时间开火,问题就消失了。

【讨论】:

    猜你喜欢
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多