【问题标题】:inapp browser window.open does not trigger loadstart or loadstop eventsinapp browser window.open 不会触发 loadstart 或 loadstop 事件
【发布时间】:2016-07-25 06:45:39
【问题描述】:

我有非常简单的代码,但它不会触发任何加载事件 - 窗口打开页面加载但未触发事件。

var ref = window.open('http://localhost:3000/#/login','_blank','location=no'); 

ref.addEventListener('loadstart', function(event) {
    log.info('in loadstart ');
});

ref.addEventListener('loadstop', function(event){
    log.info('in loadstop ');
});

https://plnkr.co/edit/ubEk8UN6SGXkYV7PgFZZ?p=preview - Plunkr 代码查看问题所在并提出解决方案。

简单的 10 到 15 行代码,但花了我整个周末来找出问题所在

【问题讨论】:

标签: javascript window.open inappbrowser


【解决方案1】:

来自window.open 的文档:

请注意,远程 URL 不会立即加载。当 window.open() 返回时,窗口总是包含 about:blank。 URL 的实际获取被延迟并在当前脚本块完成执行后开始。窗口创建和引用资源的加载是异步完成的。

所以尝试将您的事件侦听器包装在 window.setTimeout

function openInApp(){
    var ref = window.open('http://google.com/','_blank','location=no'); 
    window.setTimeout(function(){
      ref.addEventListener('loadstart', function(event) {
          console.log('in loadstart ');
          alert('start: ' + event.url);
      });
    }, 1000);
}

假设您没有同源问题,现在应该可以了。

【讨论】:

  • 谢谢,但它不起作用尝试它 - plnkr.co/edit/ubEk8UN6SGXkYV7PgFZZ?p=preview - 抛出权限被拒绝
  • 那是因为同源策略,来自docs: "对新创建的窗口的引用。如果调用失败,则为null。该引用可用于访问属性新窗口的方法和方法,只要它符合同源策略的安全要求。”尝试在本地测试它,我假设您从 localhost 调用代码,并在 localhost 上打开新窗口
  • 我将原点更改为同一个域,只是使用 window.open 打开了 plunkr 本身,但仍然存在相同的问题plnkr.co/edit/ubEk8UN6SGXkYV7PgFZZ?p=preview
  • 您仍然会在控制台中看到错误,它会告诉您原因,请求来自“run.plnkr.co”,而您正在尝试访问来源为“plnkr.co”的框架。如果可以的话,在你的本地主机上试试这个实验:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多