【问题标题】:Dynamically reload local JavaScript source / JSON data动态重新加载本地 JavaScript 源/JSON 数据
【发布时间】:2012-08-22 18:56:12
【问题描述】:

有哪些可能的跨浏览器(至少是 Firefox 和 Chrome)方法来动态重新加载本地加载的 HTML 文件引用的本地 JavaScript 文件?

背景:

本地 HTML 页面用于呈现一些数据,这些数据由两个引用的 JavaScript 文件格式化和显示。一个文件包含 JavaScript 代码,另一个文件包含 JSON 数据。

此 JSON 数据由另一个程序在磁盘上更新,如果 UI 自动合并这些更新而无需手动重新加载页面(或打开新页面),那就太好了。

在 Firefox 中,我相信可以使用 AJAX 加载 HTML 来解决该问题,但在 Chrome 中,由于同源策略失败,这将无法工作(不幸的是,我不一定依赖 --disable-web-security 来缓解此问题,因为之前所有必须关闭 Chrome 实例才能正常工作)。

我看到的唯一解决方案是运行本地 Web 服务器,但我希望有一些更简单、侵入性更小的东西(也许在 iframe 中加载 JavaScript 并重新加载 iframe,尽管我认为浏览器安全会阻止这种情况) .

有人有什么建议吗?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    如果您的应用启动 Chrome,那么您可以在启动命令中包含 --allow-file-access-from-files 标志。

    【讨论】:

    • 已接受,但这遇到了同样的问题(您注意到),您必须确保它是第一个启动的 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 中不起作用。

    【讨论】:

    • 作为初学者,我想知道如何从您调用该函数的函数中访问数据?因为我没有看到返回函数/变量。
    • @Jasper:来自myData.json 的数据可在您的 JavaScript 中全局访问。假设在您的 JSON 文件中有一个 var externalInfo。外部程序或脚本会经常更新该变量。因此,在您的 JavaScript 中,您编写了一个每五秒调用一次loadJsFile("myData.json") 的方法。最后,您在dataIsLoaded 中使用更新后的externalInfo
    • “它在 Chrome 中不起作用”--Chrome 拥有约 50% 的市场份额。我讨厌 JavaScript。
    • 九年后。它现在可以在 Chrome 中使用吗?
    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2016-06-08
    • 2017-05-14
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多