2015年7月29日 星期三

IE瀏覽器當VLC播放rtsp串流時切換頁面無回應的解決方法(onclick、onunload、herf優先順序)

今天在弄網頁的部分,網頁的內容有用到內嵌VLC,使用的Browser是IE

遇到一個很頭痛的問題是,當要從播放RTSP的VLC頁面中切換到別的頁面時,總是會造成IE Hang住,然後IE無回應 這時候IE只能強制關閉,然後重開。

猜想是因為離開頁面時,應該要呼叫VLC的Stop function先停止,再進行切換的動作。

先說明我網頁的架構如下圖所示,整個網頁有作分割式窗,上面小視窗的連結(herf)點擊之後,會在下面的main_Frame切換到超連結的頁面。另外每個Herf的區塊都有作自己要處理的onclick() function。
















後來我查了一些資料得知,當頁面要離開到別的頁面時,javascript的部分會去作windows.onunload() 函式,因此我就把這個VLC的Stop function加入在這個onunload()當中。但後來發現情況並沒有改善。

在查詢了一些資料後,又有一個重大發現,原來onclick()、onunload()、herf這三個東西是有一個優先順序的,動作的先後順序為 onclick() => onunload() => herf

因此我把VLC的Stop function加入到架構圖中的上面三個的onclick事件要做的function當中,就解決了這個IE瀏覽器當VLC播放rtsp串流時切換頁面無回應的問題。

下面程式碼為javascript,附上javascript在mainFrame以及topFrame分別要呼叫VLC stop的程式碼:

=============== mainFrame 的 javascript部分 ==============
function getVLC(name)  
{  
        if (window.document[name])    
        {  
                return window.document[name];  
        }  
        if (navigator.appName.indexOf("Microsoft Internet")==-1)  
        {  
                if (document.embeds && document.embeds[name])  
                        return document.embeds[name];    
        }  
        else  
        {  
                return document.getElementById(name);  
        }  
}  

getVLC("vlc").playlist.stop();





=============== topFrame 的 javascript部分 ==============
function getVLC(name)  
{  
        if (self.parent.frames["mainFrame"].document[name])    
        {  
                return self.parent.frames["mainFrame"].document[name];  
        }  
        if (navigator.appName.indexOf("Microsoft Internet")==-1)  
        {  
                if (self.parent.frames["mainFrame"].embeds && self.parent.frames["mainFrame"].document.embeds[name])  
                        return self.parent.frames["mainFrame"].document.embeds[name];    
        }  
        else  
        {  
                return self.parent.frames["mainFrame"].document.getElementById(name);  
        }  
}  

getVLC("vlc").playlist.stop();




沒有留言:

張貼留言