【问题标题】:Cordova InAppBrowser executeScript() not firing callback in iOSCordova InAppBrowser executeScript() 未在 iOS 中触发回调
【发布时间】:2017-12-17 11:20:03
【问题描述】:

我有一个 cordova 应用程序并使用 InAppBrowser 登录网站。在成功登录时,我需要将响应传递给应用程序。我正在使用 executeScript() 来实现,并且在 Android 中也可以正常工作,而在 iOS 中,executeScript() 的回调没有被触发。

我的Load stop事件监听如下

var ref = cordova.InAppBrowser.open("XXXX.html", "_blank", 'location=yes,toolbar=yes');


function iabLoadStop(event) {
    alert("EXECUTING SCRIPT")
    ref.executeScript({
        code: "document.body.innerHTML"
    }, function(values) {
        alert("SCRIPT EXECUTED")
        alert(values)
    });
}

我在加载停止事件时成功收到“EXECUTING SCRIPT”警报,但支持警报“SCRIPT EXECUTED”的 executeScript() 和 innerHTML 没有被触发。

【问题讨论】:

  • 也可以使用JSONP调用iabLoadStop。这些链接可帮助您处理 clientserver (php) 上的 JSONP 响应。
  • 我的问题不在 iabLoadStop 被调用。 iabLoadStop 已成功触发,但未触发 executeScript() 的 CB。
  • 能否提供 XXXX.html 中的代码来说明如何调用此 CB。
  • XXXX.html 中的代码是一个 JSON 格式的文本 { success: true },它在 Android 中成功发出警报,但在 iOS 中没有被触发。
  • 您是否也尝试过删除 iabLoadStop 中的第一个警报?因为这个函数会停止程序流,并且可能会阻止 executeScript 在 iOS 上正常工作。

标签: javascript ios cordova


【解决方案1】:

事实证明,原因在于第一个alert。此函数停止程序流,但也导致 XXXX.html 中由 executeScript 执行的代码停止。

因此应该避免在事件loadstopexecuteScript 之间调用此类函数(alert/confirm 等),至少在 iOS 上是这样。还有像console.log 这样的替代品。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多