Opera无法加载一些JavaScript文件。

10

我有一个在IFRAME中加载的网页,在IE和Firefox中运行正常,但在Opera中不行。这让我很不爽,因为我多年来一直使用的是Opera。而且我自己写了这个东西。 :-)

问题是Opera没有加载组成该页面的某些JavaScript文件。我怀疑这与页面本身通过HTTPS加载,而包含的文件通过不同的主机和端口通过HTTP加载有关。我相信Opera允许这样做,但Dragonfly的Net选项卡甚至没有显示尝试加载它们。

该页面是一个Rally“定制应用程序”,我无法控制它在IFRAME中加载或通过HTTPS加载的事实。我也无法控制包含的文件是从不同的主机加载的,或者该主机仅支持HTTP。所以我陷入了混合内容的困境。

除其他内容外,页面的HEAD元素包含(稍加清理):

<script src="http://www.example.com:81/common/jquery-1.4.2.js"></script>
<script src="http://www.example.com:81/common/jsTree/jquery.jstree.js"></script>
<script src="http://www.example.com:81/common/utils_jserror.js"></script>
<script src="http://www.example.com:81/common/utils_logging.js"></script>
<script src="http://www.example.com:81/common/utils_print_r.js"></script>
<script src="http://www.example.com:81/common/utils_rally_query.js"></script>
<script src="http://www.example.com:81/common/json2.js"></script>
<script src="/slm/js/slm.js"></script>
<script src="/slm/js-lib/dojo/rally-1.3.1/dojo/dojo.js.uncompressed.js"></script>
<script src="/slm/mashup/1.18/js/batch-toolkit.js"></script>
<script src="/slm/mashup/1.18/js/utilities.js"></script>

所有的 "/slm/..." 相关内容都在被加载,而 没有任何关于 "www.example..." 的内容被加载。

有人知道我是做错了什么吗?


脚本是从互联网上的常规服务器加载的,还是从内部网络或本地主机上的服务器加载的? - hallvors
1
你是否尝试过在地址前使用“//”而不指定协议呢?例如:src="//www.example.com" - karlcow
@hallvors: "example.com"脚本来自于本地Intranet上的Windows服务器,无法从公共互联网访问。但是它们可以从运行浏览器的计算机访问-如果我将它们剪切并粘贴到地址栏中,JavaScript源文件就可以在浏览器中读取。 - Ross Patterson
@karlcow:我从未考虑过这一点。但我认为它会让浏览器假定“https:”,而相关的服务器只会执行“http:”。但是这值得一试,谢谢! - Ross Patterson
直到你问了我才想起来 :-) 但这引起了Hallvors的注意,看起来他的答案就是最佳答案。测试后我会更新。 - Ross Patterson
显示剩余2条评论
1个回答

14
Opera有一个名为跨网络保护的功能。基本上,它为来自互联网的页面对本地网络中的内容进行的某些额外限制。
这个功能存在的原因是所谓的“仿冒农场”攻击出现了。发现一些流行的家用路由器/调制解调器的基于HTTP的配置界面安全性很差,恶意网页可以重写你的路由器设置,例如将其配置为使用代理并将所有流量传输到恶意服务器。为了应对这种情况,Opera知道一些IP地址在公共网络上不使用(例如127.0.0.1或192.168.*),不允许来自“公共”站点的页面加载文件或向“本地”站点发送请求。
您可以根据每个站点重新配置此选项。最简单的方法可能是在“公共”站点上添加IFRAME,加载从本地服务器上的资源之一。 IFRAME 将显示一个“跨域请求”警告页面,其中包含一些选择链接。单击链接以始终允许该服务器上的本地请求,那么您的跨网络应用程序现在应该可以正常工作了。
(添加IFRAME就像查看源代码,添加,保存,然后“工具>高级>从缓存中重新加载”)

1
哦,那听起来非常有前途!Opera无法加载的服务器位于10.x.y.z地址,这可能与Opera的禁止规则相匹配。我迫不及待地想尝试这个解决方案。 - Ross Patterson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接