gpt4 book ai didi

javascript - 当系统浏览器打开时,Cordova inappbrowser 丢失事件处理程序

转载 作者:行者123 更新时间:2023-11-30 00:46:05 25 4
gpt4 key购买 nike

几天来我一直在努力解决这个问题,所以真的希望有人能找到解决方案!

该问题仅在 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 将关闭。

感谢您的关注!

最佳答案

InAppBrowser eventHandler 需要重新初始化一次 cordova.InAppBrowser.open(url, '_system');或 window.open(url, '_system');在事件处理程序中被调用。在您的代码中,添加对 window.open(url, '_system'); 的引用并添加事件处理程序如下:

    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

关于javascript - 当系统浏览器打开时,Cordova inappbrowser 丢失事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41790161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com