首页 > 解决方案 > 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。

标签: cordovaionic-frameworkinappbrowsercapacitorionic5

解决方案


我对 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++;
});

推荐阅读