• 为什么Firefox 3及之后的版本不能加载本地的JavaScript文件了?


    一段时间来一直受这样的困扰,就是我的Firefox无法运行本地的dojo的测试文件。一直以为是我的firefox或者机器出了什么问题,就只好去使用IE或者Chrome去运行这些测试例子,可惜不能用firebug的确让人很不爽。

    今天在firebug查看了一些错误情况,报错居然是“Access to restricted URI denied”。这个明显是跨 域访问的错误,但是本地文件怎么报这样的错呢?在Firefox的about:config搜索了一下policy,居然找到了原因所在,原来 Firefox对于本地文件也进行了同源访问的安全设置,配置参数是:security.fileuri.strict_origin_policy。这 个新的设置只是在firefox 3才被加入,并且默认是开启的。不过你也可以将这个关掉,这样就可以如同以前那样运行本地的dojo测试用例,或者其它你想本地加载的 JavaScript文件。

    local-file-p-origin-policy

    继续在google了一下,找了这个”feature”的由来,https://bugzilla.mozilla.org/show_bug.cgi?id=230606,大概是说本地的文件如果没有这样的限制,可以访问本机的其他文件,这样会造成安全隐患。John Resig(Father of  jQuery) 也有一个blog关于这个问题,http://ejohn.org/blog/tightened-local-file-security/,下面的评论也挺值得看看的。

    摘自 http://liwenbing.cn/2009/06/05/why-ff3-cannot-load-local-javascript-file/

    解决firefox动态加载JS文件失败

    a.js //必须把执行脚本封装到函数中去,不然alert在IE下能反复执行,而在Firefox下只能执行一次

    function show(){
    alert('我执行了!');
    }

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试</title>
    <script type="text/javascript">
    function myclick(){
      document.getElementById("thejs").src="a.js";
    show();
    }
    </script>
    <script type="text/javascript" id="thejs"></script>
    </head>
    <body>
    <input type="submit" value="查询" onClick="javascript:myclick();" />
    </body>

    b.js   //若执行代码不封装到函数中去,必须动态重新创建js文件

    alert('我执行了!'); 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试 </title>
    <script type="text/javascript">
    function myclick(){

            var oldS=document.getElementById('thejs');
            if(oldS) oldS.parentNode.removeChild(oldS);

            var t=document.createElement('script');
            t.src='b.js';
            t.type='text/javascript';
            t.id="thejs";
            document.getElementsByTagName('head')[0].appendChild(t);

            //document.getElementById("thejs").src="a.js";
    }
    </script>
    <script type="text/javascript" id="thejs"> </script>
    </head>
    <body>
    <input type="submit" value="查询" onClick="javascript:myclick();" />
    </body>

  • 相关阅读:
    排序算法(2)-冒泡排序及优化
    [转]Java泛型详解
    [转]Java泛型详解
    02-机器学习_(knn分类算法与应用)
    01-机器学习_(python数据类型详解)
    流量运营项目说明
    数据仓库星型模型vs雪花模型
    数据仓库命名规范
    数据仓库建模
    数据仓库
  • 原文地址:https://www.cnblogs.com/lushuicongsheng/p/1997250.html
Copyright © 2020-2023  润新知