簡體   English   中英

Cordova inappbrowser 在系統瀏覽器打開時丟失事件處理程序

[英]Cordova inappbrowser looses event handlers when system browser opens

幾天來我一直在努力解決這個問題,所以真的希望有人有解決方案!

該問題僅存在於 Android 中,iOS 似乎運行良好。

該應用程序正在使用 inappbrowser 顯示網站。 單擊網站外部的鏈接時,我想在系統瀏覽器中啟動所選鏈接,然后確保 inappbrowser 頁面不會更改。 我使用下面的代碼進行了這項工作。 我遇到的問題是,在系統瀏覽器打開后,我的所有事件(loadstart、loadstop)不再起作用,因此如果選擇了另一個外部鏈接,它現在不會在 loadstart 事件中檢測到並在 inappbrowser 中打開。

如果我只是注釋掉 window.open(url, '_system'); 在 loadstart 事件中的行,一切都繼續正常工作,但顯然外部鏈接不會在系統瀏覽器中打開。

launchBrowser: function (url) {
    app.inAppBrowserRef = cordova.InAppBrowser.open(url, '_blank', app.browserOptions);
    app.inAppBrowserRef.addEventListener('loadstart', function (event) {
        var url = event.url;
        // Determine if this is an external link that should be launched in the system browser.
        if (url.toLowerCase().indexOf(app.portalUrl.toLowerCase()) === -1) {
            //External link, launch in system browser.
            window.open(url, '_system');
            app.setInappBrowserUrl(app.previousUrl);
        }
    });
    app.inAppBrowserRef.addEventListener('loadstop', function (event) {
        app.previousUrl = event.url;
    });
},

覆蓋 inappbrowser 頁面的函數。

setInappBrowserUrl: function (overrideUrl) {
    app.inAppBrowserRef.executeScript({
        code: "window.location = '" + overrideUrl + "';"
    }, function () {
        //alert("Redirected!");
    });
}

我有一個粗略的解決方法,涉及使用我想要顯示的 url 調用 launchBrowser(),但問題是我丟失了所有歷史記錄,因此當您按下后退按鈕時,inappbrowser 會關閉。

感謝您的關注!

一旦cordova.InAppBrowser.open(url, '_system'); 需要重新初始化InAppBrowser eventHandler; 或 window.open(url, '_system'); 在事件處理程序中調用。 在您的代碼中,添加對 window.open(url, '_system'); 的引用。 並添加 eventHandler 如下:

    function loadStartEventHandler(event){
    var url = event.url;
    // Determine if this is an external link that should be launched in the system browser.
        if (url.toLowerCase().indexOf(app.portalUrl.toLowerCase()) === -1) {
          //External link, launch in system browser.
          //window.open(url, '_system');
          //reference the new InAppBrowser
          var ref = window.open(url, '_system');
          //reassign the event handler
          ref.addEventListener('loadstart', loadStartEventHandler);

          app.setInappBrowserUrl(app.previousUrl);
        }
    }
    app.inAppBrowserRef.addEventListener('loadstart', loadStartEventHandler);

該錯誤已提交給cordova apache。 https://issues.apache.org/jira/browse/CB-13198

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM