cordova - InAppBrowser loadstop 触发两次
问题描述
我正在使用带角度的 ionic 5,我需要一个 inappbrowser 来打开一个网站的 URL 数组,然后单击网页上的某个按钮。该数组具有最后一个 URL,https://www.example.com/#close
这使其关闭浏览器。所以我做了这样的事情
const browser = this.iab.create(arr[0], '_blank', {hideurlbar : 'yes'} );
let i = 1;
browser.on('beforeload').subscribe((event) => {
if (event.url == 'https://www.example.com/#close') {
browser.close();
this.presentAlert("You have seen all the Links");
}
});
browser.on('loadstop').subscribe(event => {
browser.executeScript(
{
code :
`
localStorage.setItem('next', '${arr[i]}')
var elements = document.getElementsByClassName("fr66n");
var myFunction = function(event) {
window.location = localStorage.getItem('next');
};
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', myFunction, false);
}
`
}
);
i++;
});
但这里的问题是,loadstop 在每次点击时都会运行两次,从而使浏览器加载备用 URL。
解决方案
我对 InAppBrowser 有同样的问题。
但是,我找到了一个临时解决方案,其中包括在“代码”中放置一个 setTimeOut 并使用“loadstart”而不是“loadstop”:
browser.on('loadstop').subscribe(event => {
browser.executeScript(
{
code :
`
setTimeout(() => {
localStorage.setItem('next', '${arr[i]}')
var elements = document.getElementsByClassName("fr66n");
var myFunction = function(event) {
window.location = localStorage.getItem('next');
};
for (var i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', myFunction, false);
}
}, 1000);
`
}
);i++;
});
推荐阅读
- django - Django 3.1 错误:自反多对多关系。添加创建两个关系而不是一个
- html - 如何让孩子的身高包裹在 flexbox 父母中
- arrays - 矩阵和交换行
- javascript - 为什么 nodeJs 不从磁盘读取整个二进制文件?
- python-3.x - 使用 python 抓取网站搜索栏
- json - 由于数组构造或其他原因导致的 json 空格语法错误?
- c# - 即使设置了绑定并将数据添加到可观察集合中,Xamarin Forms Collectionview 也不会在 UI 上显示任何内容
- python - Python 的基本语音协助
- delphi - 可以通过 windows.updateTasks 扩展重新启动(Delphi)桌面桥应用程序吗?
- react-native - 如何避免 createStackNavigator 崩溃 react-native 应用程序?