2013-07-04 128 views
3


我使用窗口引用名稱啓動子窗口。我想在每次更改時捕獲子窗口的URL。如何使用javascript從父窗口獲取子窗口url

var winRef; 
    var url='http://www.google.com'; 
    if(winRef == null || winRef.closed) 
    { 
     winRef = window.open(url, "mywindow"); 
     winRef.focus(); 
     alert(winRef.location.href); 
    } 
    winRef.captureEvents(Event.CHANGE); 
    winRef.onchange=function(){ 
     alert('change event triggered'); 
     console.log(winRef.location.href); 
    } 


我與事件LOAD,CHANGE試圖捕捉窗口的位置變化。但LOAD和CHANGE事件只會觸發一次。

我不想使用setinterval來檢查window.location.href中的更改,因爲它可能導致執行問題。

是否有任何其他的方式來獲取子窗口的URL?

+0

你不能從另一個窗口做到這一點,你必須使用ajax從子窗口本身通過服務器發送信息到服務器或其他窗口。 – CME64

+0

Phonegap的InAppBrowser具有loadstart,loadstop等事件,每次單擊某個鏈接時都會捕獲URL。我認爲我們將能夠從我們的javascript window.open概念 –

+0

@ CME64做同樣的事我也有同樣的問題。因此,子窗口必須將消息發送到服務器,並且服務器必須將此信息發送到父窗口?我的理解是否正確? – Dinesh

回答

0

您無法準確檢測到事件,但可以執行解決方法並檢查所有X毫秒的URL。

var self = this 

var detectsUrl = setInterval(function(){ 
    var a = winRef.document.createElement('a'); 
    a.href = winRef.document.URL; 
    if (a.hostname == "www.myURL.com") { 
     winRef.close(); 
     clearInterval(detectsUrl); 
     self.callback(); 
    }; 
}, 1000); // Here we check every seconds 
+0

儘管我喜歡這個想法,但在許多情況下,這不是一個可行的解決方案,除非您的子窗口的頁面與父窗口的父頁位於同一個域中,否則您將當您嘗試使用winRef.document.url時,會出現跨站點安全違例異常 – jcairney

相關問題