在iOS上的Cordova inAppBrowser中执行不一致的executeScript

时间:2016-08-23 00:04:32

标签: javascript ios cordova cordova-plugins inappbrowser

我在我的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。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果inAppBrowser中的网站恰好通过HTTPS提供,如果该网站使用的executeScript() HTTP响应标头不包含Content-Security-Policy,则gap:的回调将无效或gap-iab:指令的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()运行之前打开控制台,否则您可能不会收到错误消息。

答案 1 :(得分:0)

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

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

更改轮询时间后,所有人都在不同的时间点火,问题就消失了。