2010-11-16 34 views
0

我有一個在HTA(MSFT HTML應用程序)中運行的應用程序,它在整個幀中一遍又一遍地使用相同的腳本文件;因爲這會在地點達到9,並且隨着應用程序在各種服務器中設置,並且緩存設置爲立即過期,我正試圖在這個泥球中劃出某種表現。跨幀腳本重用

是否有一個「好」的方式來加載主腳本文件的頂部框架,然後excuting它內部框架,即

---頂部窗口----

var MainScript = function(){ return (function(){ all current functions etc here })(); }; 

- - 副車架----

var FrameScript = top.MainScript; 
FrameScript(); 

而且怎麼會變成這樣通過窗口範圍的影響(它將繼續上面的窗口範圍或者是在框架窗口的範圍)

回答

0

最簡單的方法似乎是給子幀一個ID,然後動態填充它在主框架中加載的腳本(使用eval使js運行);

|>父(又名頂部框架)

<script>top.windows = [];</script> 
<script id="MyScript"> 
    var test = function(){ top.windows.push(window); } 
</script> 

| >> 加載在iframe SubSubFrame

| >>>SubSubFrame

<script id="SF1"> 
document.getElementById("SF1").innerHTML = eval(top.window.document.getElementById("MyScript").innerHTML); 
test(); 
</script> 

這高達和超過8幀作品內的可信域深(在.HTA您爲此設置申請=在幀真)

我用top.windows [],所以我可以檢查的範圍。 (在螢火蟲中輸入console.log(top.windows))

Nausiating and deep;谷歌做類似的延遲JS加載/執行的東西。

+0

這種方法消除重複往返到服務器,但仍反覆'eval's相同的JavaScript。將js庫加載到頂層窗口並直接調用它的函數會更有效率(如果需要在框架窗口的上下文中調用它們,則使用'apply','call'或'bind'目的)。 – Doin 2013-04-21 19:54:33

+0

@Doin和3年前一樣;而任何實施這個系統的人都應該失敗。我傾向於不在乎:爲了清楚起見,每個子幀都是可定製的(在xml級別)用於各種工作流等,並且腳本必須在子幀的上下文中執行。它可能通過調用父庫並傳遞窗口作爲參考來完成此操作,但本網站中的大量JS腳本使得上述操作變得更簡單(無需重寫50K +壞JS代碼行) – 2013-04-22 08:26:10