为什么Firefox 3及之后的版本不能加载本地的JavaScript文件了?
2011-03-27 22:35
603 查看
一段时间来一直受这样的困扰,就是我的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文件。
继续在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>
今天在firebug查看了一些错误情况,报错居然是“Access to restricted URI denied”。这个明显是跨
域访问的错误,但是本地文件怎么报这样的错呢?在Firefox的about:config搜索了一下policy,居然找到了原因所在,原来
Firefox对于本地文件也进行了同源访问的安全设置,配置参数是:security.fileuri.strict_origin_policy。这
个新的设置只是在firefox
3才被加入,并且默认是开启的。不过你也可以将这个关掉,这样就可以如同以前那样运行本地的dojo测试用例,或者其它你想本地加载的
JavaScript文件。
继续在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>
相关文章推荐
- 本地控件不能正常加载也会导致VSS不能正常得到最新版本
- Windows 不能加载本地存储的配置文件。此问题的可能原因是安全权限不足或本地配置
- Nand Flash本地加载根文件系统后telnet不能登录
- Android WebView加载本地文件,使用JavaScript定位到指定位置
- Nand Flash本地加载根文件系统后telnet不能登录
- Flex不能加载本地文件(BingViewer)
- IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
- 2003不能加载本地配置文件
- IE9.0或者360下js(JavaScript、jQuery)不能正确执行(加载),按F12后执行正常;Firefox下ajax的success返回数据data(json、string)无法获取
- iOS9以下版本使用WKWebView加载本地HTML文件不显示,处理时容易忽略的问题
- Android debug 版本为什么system/bin下面的问题,push进去之后,可能造成手机不能开机
- FireFox下使用Javascript上传大文件(php版本)
- JavaScript创建与读写本地文件(IE&Firefox) .
- iOS UIWebView 加载本地html文件 同时加载javascript文件,javascript文件无效
- 解决FLASH发布成EXE文件后,不能正确加载本地文件的问题
- FireFox下使用Javascript上传大文件(php版本)
- windows不能加载本地存储的配置文件
- Windows不能加载本地存储的配置文件
- 怎么处理windows登录弹出不能加载本地存储文件?
- 开机提示“Windows不能加载本地存储的配置文件”