提问人:Eli 提问时间:6/28/2009 最后编辑:Eli 更新时间:3/23/2012 访问量:3729
Opera:无法加载 .js 文件
Opera: .js file won't load
问:
我有一个页面在标题中调用脚本,如下所示:
<script type="text/javascript" src="http://www.discoverfire.net/analytics/l/a.js"></script>
(请注意,您将无法加载此脚本,因为它在本地作为暂存域进行 DNSd)
很简单。
Firefox、IE、Chrome 都对这个基本的、一心一意的功能没有问题。
然而,Opera 拒绝加载脚本。其中的任何变量或函数都是“未定义”的,在 dragonfly 中,脚本标签显示在 DOM 中,但“脚本”选项卡显示“未找到脚本文件”。
我去谷歌找到随机页面,他们的外部 .js 文件似乎工作得很好。
知道为什么Opera讨厌我吗?我是否缺少安全/javascript 功能?
一些可能相关但实际上不应该有区别的事情:
- 该脚本与页面位于不同的域中。
- 该脚本仅在我的本地网络上可用。该域在本地进行DNS的暂存,从网络外部指向其他地方。Opera 是否有秘密使用外部 DNS 服务器的设置?
- 该脚本适用于我拥有的所有其他浏览器。
- 问题不在于脚本内容。我已将其简化为带有警报的单行,但它在 Opera 中根本不起作用。
更新:
好吧,问题似乎出在Opera如何处理该域。
我已将脚本移动到其他几个域,它确实工作得很好。我已将其移动到本地DNS域上的多个路径,并且它无法从该域的任何地方工作。
这让我相信问题在于,由于某种原因,Opera 无法或不会从该域加载脚本。
奇怪的是,从域加载页面和其他资源似乎没有问题,问题仅在于 .js 文件。
域已注册,但已停放。我们在本地对其进行了DNS,因此我们可以将其用于暂存/测试,这可能会以某种方式与Opera的JS安全性混淆。
不过我可能是错的——我真的不知道。如果其他人有,我很想听听。
更新2:
关于 Dragonfly 和错误控制台/开发人员工具,他们根本没有说任何关于脚本的事情。脚本中应该存在的变量和函数存在大量未定义变量错误,但除此之外,没有错误。奇怪的是,脚本标签确实显示在 DOMM 中,但是如果我单击“脚本”选项卡,它会显示“未找到脚本”。
更新3:
没有被阻止的内容,因此我们至少可以排除该设置。
答:
您应该在 Opera 论坛中提问。我过去在Opera上遇到过一些问题,他们很快就回答了。
评论
您可能想看看它的广告拦截器是否妨碍了您。您的 URL 包含文本“analytics”,这可能是“阻止此”模式的一部分。我知道有些人通过 Opera 阻止 Google 分析。一个简单的测试可能是尝试将 .js 移动到主机上的其他路径。
评论
是否提供 JavaScript 文件的正确 MIME 类型的主机。这不是一个众所周知的事实,但该属性实际上被浏览器忽略,因为它相信服务器指定了正确的类型。type=text/javascript
此外,当涉及到 JavaScript 时,MIME 类型实际上是错误的,实际的 JavaScript MIME 类型是(如果我没记错的话,可能是)。如果你不相信我,你应该看看这里,我有更多信息,并链接到道格拉斯·克罗克福德(Douglas Crockfords)的视频,他在视频中讨论了哑剧类型。text/javascript
application/ecmascript
application/javascript
评论
你检查过 Opera 的错误控制台吗?高级>错误控制台>工具 它应该提供有关为什么它不会加载或是否存在某种其他错误的信息。
评论
就像 Jacob 建议的那样,您应该检查它是否没有被阻止。为此,请执行以下操作:
- 右键单击您的页面
- 选择“阻止内容...”在上下文菜单中
- 在屏幕顶部,单击“详细信息...”按钮
- 您应该会看到当前页面上被阻止的 URL
评论
我最近有类似的事情 - opera 不会在外部服务器上运行脚本......如果我下载了它并将其放在 localhost 上,我也不会这样做。它仅在脚本标记之间复制/粘贴到 html 页面时运行。
事实证明,该脚本是用 UTF-16 编码的,这在某种程度上混淆了浏览器。当我将其转换为 UTF-8 时,一切运行良好。
因此,以防万一,如果您仍然遇到该问题,请查看编码设置......
评论
我遇到了完全相同的问题,将脚本从 localhost/开发服务器加载到托管在公共服务器上的页面中,但无济于事。我管理脚本在 Opera 中加载的唯一方法是将页面的副本保存到同一开发服务器上的某个位置,并使用标签引用原始域以获取页面的 .css 和 .js 链接文件。这奏效了。看起来 Opera 不喜欢混合使用公共域和 localhost 域,但处理 localhost 时没有抱怨。
你所看到的可能是Opera针对所谓的“网络钓鱼”攻击的安全预防措施:跨网络保护。不能将来自公共服务器的内容与来自本地服务器的内容混合使用。
请看我的答案 这里 解决方法:
评论