2012-08-22 86 views
2

什麼是可能的跨瀏覽器(至少使用Firefox & Chrome)方法來動態地重新加載本地加載的html文件所引用的本地Javascript文件?動態地重新加載本地Javascript源文件/ json數據

背景:

正在使用本地HTML頁面來呈現被格式化,並通過兩個被引用JavaScript文件中顯示的一些數據。一個文件包含Javascript代碼,另一個文件包含JSON數據。

此JSON數據由另一個程序在磁盤上更新,如果不手動重新加載頁面(或打開一個新頁面),UI將自動合併這些更新會很好。在Firefox中,我相信這個問題可以通過AJAX加載html來解決,但是在Chrome中,由於相同的原始策略失敗(我不能一定依靠--disable-web-security緩解這一點,因爲所有以前的Chrome瀏覽器必須關閉才能正常工作)。

我看到的唯一解決方案是運行一個本地Web服務器,但我希望有一些更簡單,侵略性更小的方法(可能會將JavaScript加載到IFrame中並重新加載IFrame,儘管我想這會被瀏覽器安全阻止)。

任何人有任何建議嗎?

回答

2

如果您的應用程序啓動了Chrome,那麼您可以在啓動命令中包含- 允許文件訪問從文件標誌。

+0

已接受,但遇到同樣的問題(您注意到),因此您必須確保它是第一個啓動的chrome實例(並且我無法在所有情況下確保這一點)。 –

2

我使用下面的代碼重新加載JavaScript和JSON文件。

/* Load a JavaScript or JSON file to use its data */  
function loadJsFile(filename, dataIsLoaded){ 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type","text/javascript"); 
    fileref.setAttribute("src", filename); 
    fileref.onload = dataIsLoaded; 

    if (typeof fileref!="undefined"){ 
     document.getElementsByTagName("head")[0].appendChild(fileref); 
    } 
} 

/* The callback that is invoked when the file is loaded */ 
function dataIsLoaded(){ 
    console.log("Your data is ready to use"); 
} 

用法當JSON文件在同一目錄網站:

var jsonFile= "myData.json"; 
loadJsFile(jsonFile, dataIsLoaded); 

我在IE10和Firefox 22成功地測試它;它在Chrome中不起作用。

+0

因爲我是初學者,所以我想知道如何從您調用該函數的函數訪問數據?因爲我沒有看到一個返回函數/變量。 – Jasper

+1

@Jasper:來自'myData.json'的數據可以在JavaScript中全局訪問。比方說,在你的JSON文件中是一個'var externalInfo'。外部程序或腳本經常更新該變量。所以在你的JavaScript中,你每五秒鐘寫一個調用'loadJsFile(「myData.json」)'的方法。最後,在'dataIsLoaded'中使用更新後的'externalInfo'。 –

+0

「它在Chrome中不起作用」 - Chrome擁有約50%的市場份額。我*討厭* JavaScript。 –

相關問題