2010-11-05 65 views
0

在下面的Javascript中,我必須不斷從Popup頁面找到mainFrame,有沒有更好的方法來做到這一點?Javascript:從彈出窗口在mainPage上查找框架?

function sendRefreshMessage(data) { 
    var myObj = null; 
    myObj = document.getElementById('slPlugin'); 
    if (null != myObj) { 
     try { 
      //perform operation on myObj 
     } catch (err) { 
     } 
    } 
    else { 
     if (null != top.opener.top.mainFrame) { 
      myObj = top.opener.top.mainFrame.document.getElementById('slPlugin'); 
      if (null != myObj) { 
       try { 
        //perform operation on myObj 
       } catch (err) { 
       } 
      } 
     } 
     else { 
      myObj = top.opener.top.opener.top.mainFrame.document.getElementById('slPlugin'); 
      if (null != myObj) { 
       try { 
        //perform operation on myObj 
       } catch (err) { 
       } 
      } 
     } 
    } 
} 

回答

1

嗯,有一個更清潔的(但不一定更好)的方式來做到這一點,假設你的插件始終駐留內的元素稱爲mainFrame

function findPlugin(container) 
{ 
    var plugin = null; 
    if (container.mainFrame != null) { 
     plugin = container.mainFrame.document.getElementById('slPlugin'); 
    } 
    if (plugin == null && container.opener != null) { 
     plugin = findPlugin(container.opener.top); 
    } 
    return plugin; 
} 

function sendRefreshMessage(data) 
{ 
    var plugin = findPlugin(window.top); 
    if (plugin != null) { 
     try { 
      // Perform operation on `plugin`. 
     } catch (err) { 
      // Please avoid empty catch blocks, they're evil. 
     } 
    } 
} 
+0

謝謝,我會嘗試一下。 – VoodooChild 2010-11-13 20:44:45

+0

我只有空的catch塊,因爲如果插件上的操作失敗,我會得到一個JavaScript錯誤。 – VoodooChild 2010-11-14 02:56:45