2016-07-25 93 views
2

我有非常简单的代码,但它不会触发任何加载事件 - 窗口打开页面加载但事件不会触发。inapp浏览器window.open不会触发loadstart或loadstop事件

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 - 普朗克代码,看看有什么问题并提出解决方案。

简单10-15行代码,但吃了我所有的周末找出什么地方出了错

+0

你看过吗? http://stackoverflow.com/questions/25098021/securityerror-blocked-a-frame-with-origin-from-accessing-a-cross-origin-frame –

+0

你正在加载'http:// localhost:3000 /#/从'http:// localhost'登录? – guest271314

回答

2

从文档的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); 
} 

假设你有没有相同来源的问题,现在应该工作。

+0

谢谢,但它没有奏效 - https://plnkr.co/edit/ubEk8UN6SGXkYV7PgFZZ?p=preview - 抛出权限被拒绝 –

+1

这是由于同源策略,从[docs](https:// developer .mozilla.org/en-US/docs/Web/API/Window/open): “对新创建的窗口的引用,如果调用失败,它将为空引用可用于访问属性和只要符合相同的原产地策略安全要求,就可以使用新窗口的方法。“ 尝试在本地进行测试,我假设你从本地主机调用代码,并在本地主机上打开新窗口 – horyd

+0

我将原点更改为同一个域,只是使用window.open打开了plunkr本身,但问题仍然存在https: //plnkr.co/edit/ubEk8UN6SGXkYV7PgFZZ?p=preview –