2017-08-29 24 views
0

我有一個模式(從我的應用程序的React組件),並在裏面我有一個iframe。我無法控制iframe,並且我知道在採取某些操作後它會調用window.close。有沒有辦法檢測iframe中的內容何時調用window.close,所以我也可以關閉模​​態?是否有可能從iframe中檢測window.close?

重要提示:我沒有使用jQuery,只使用純javascript。

IFRAME代碼:

 <iframe height='500' width='340'      
     src='http://content_url' 
     ref={(f) => { this.ifr = f; }}> 
     </iframe> 

這個裁判,可以參考我從到IFRAME我反應成分:

componentDidMount() { 
    this.ifr.onload =() => { 
     //whatever action 
    }; 
    } 

,但我不能做我想做與卸載事件,因爲iframe沒有被卸載,它只是在它內部調用window.close。

謝謝!

+0

新窗口是如何打開的? – adeneo

+0

是否調用window.close甚至可以使用iframe?當你「關閉」它所代表的窗口實例時應該發生什麼 - 在父文檔中的iframe元素應該被解散,或者 - 什麼......? – CBroe

+0

@adeneo我不知道我是否正確理解了這個問題,但是我有一個反應模塊組件,當它調用渲染鉤子時,它內部有一個指向第三方url的iframe。用戶在iframe中進行一些交互,然後第三方組件調用window.close。我無法控制這個組件 –

回答

0

您可以嘗試將window.close設置爲其他函數,並在iframe調用它時捕獲它。

var closing = window.close; 
    window.close = function() { 
    console.log('window close fired!'); 
    closing(); 
    }; 

甚至創建事件發射器的更好方法。

var event = new Event('onCloseWindow'); 

    // Listen for the event. 
    elem.addEventListener('onCloseWindow', function (e) { ... }, false); 

    var closing = window.close; 
    window.close = function() { 
    // Dispatch the event. 
    elem.dispatchEvent(event); 
    closing(); 
    }; 
相關問題