【问题标题】:InAppBrowser loadstart event not firing / scope issuesInAppBrowser loadstart 事件未触发/范围问题
【发布时间】:2018-08-27 15:53:13
【问题描述】:

(这是一个 phonegap 应用,适用于 iOS 和 Android,使用 JS/HTML/CSS)

我使用类选择器“external”打开了我想使用 inappbrowser 的链接。所以我有下面的代码来打开这些链接:

$("body").on("click", "a.external", function(){
    var thisHref = $(this).attr("href");
    appBrowser = cordova.InAppBrowser.open(thisHref, '_blank', 'location=no, zoom=no');
    appBrowser.addEventListener('loadstart', function(event) { 
    if (event.url == "XXXXX") { appBrowser.close(); }
});

在外部 URL 本身,我设置了链接到“XXXXX”的链接,该链接应该关闭 inAppBrowser。在 Phonegap 桌面模拟器上一切都 100% 运行,但是当我在实际设备上安装 .apk 或 .ipa 文件时,除了应用程序中的第一次初始点击外,不会触发 loadstart。

这让我相信这是一个范围问题,因为看起来只有在单击 a.external 后直接发生加载启动时,侦听器才会启动。 (P.S. appBrowser 是全局定义的 [var appBrowser; 在顶部])。

我不确定如何安排代码以使侦听器连接起来,并在整个过程中继续工作。我尝试将 addEventListener 单独放置在 deviceready 函数中,或者将整个事物放置在 deviceready 中(均无效)。

所以我希望这里缺少一些简单的东西,这确实是一个范围问题。奇怪的是,它在模拟器上按原样工作,但仅在第一次单击设备本身时才起作用。

谢谢!

【问题讨论】:

    标签: javascript android jquery phonegap inappbrowser


    【解决方案1】:

    以下是我如何使用 InAppBrowser 在 phonegap 项目中进行设置的相关部分,如果我正确理解您的问题,这与您希望设置的方式相似。

    phonegap-bootstrap.js

    onDeviceReady: function() {
        window.open = cordova.InAppBrowser.open;
    }
    

    打开链接时

    window.open(url, '_system', 'location=yes');
    

    我想您不需要位置标志,但是当您打开新窗口时,它会保留 URL 栏。希望对您有所帮助,我记得在某个时候不得不弄清楚这一点,但是我可能已经忘记了任何更好的解释。

    【讨论】:

    • 我只对标有“外部”类的链接使用 inappbrowser,因此使用了上面的 .on 函数。我不想调用 _system,因为这会单独打开 Chrome(想让它出现在应用程序本身的“全部”内部,因此是 _blank 或 _self)。我认为我的问题是 .addEventListener 失去作用域,或在第一次点击后停止工作。
    • 好的,抱歉,和我正在做的有点不同。不过,查看您的代码的一个想法是从 jquery 选择器/处理程序中引用事件对象,因此它上面有一个 preventDefault() 。 $('..').on('click',function(event){event.preventDefault()})...不确定这是否有帮助,但也许值得一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多