Just spent about 5 hours sorting out this issue, so I thought sharing how I overcame it would be helpful to someone and save them some time (it seems to be a pretty recent fix - 9 hours ago at the time of posting this question - which I found here).
I am using jQuery version 1.10.1.
概览
我正在构建一个 Facebook 选项卡应用程序。这是一个竞赛报名表,访问者将在其中输入一些信息并上传他们在最近假期拍摄的照片。在嵌入到 Facebook 之前,我已经在所有浏览器中使用了该表单。
- 使用
$.post()
提交表单. jQuery 在此过程中指向的 PHP 脚本与表单本身位于同一域中。 - 在提交表单之前,您必须上传一个文件。文件上传过程是这样构建的:
- 有一个
<div>
它充当一个按钮。在这个 div 中,有一个<input type="file" />
。不透明度设置为 0 的字段。 - 当点击不可见文件输入时,用户选择一个文件。
- 选择文件后,
.change()
事件被触发并且<div>
将显示文本“再次单击以上传”。我这样做而不是立即上传文件,因为在研究过程中,我了解到 Internet Explorer 不喜欢您在.change()
内提交表单。附加到文件输入的处理程序。 - 当您再次单击 div 时,表单将通过
.submit()
提交.该表单针对隐藏的 iframe。文件正在上传,完成后 iframe 触发.load()
事件。 - 加载事件的处理程序使用
.contents().find("div").html()
获取我在管理文件上传的 PHP 脚本中发回的一些字符串化 JSON。 JSON 包含文件上传的状态,如果上传成功,还包含指向已处理图像的 URL。
- 有一个
问题
当应用程序嵌入 Facebook 时,该应用程序在所有浏览器中都能正常工作,Internet Explorer 除外。 Internet Explorer 在控制台中给出以下内容:
- 脚本 5:访问被拒绝。
- SCRIPT5009:“$”未定义。
我首先研究了第二个错误,发现了所有我预期会遇到并已经检查过的东西,例如:
- 脚本路径错误。
- 可能有一个 htaccess 文件阻止对该文件的访问。
- 脚本未正确加载,清除缓存等,然后重试。
- 可能是我尝试使用的脚本在加载之前需要 jQuery。
我仔细检查了所有这些并确认它们不是这种情况。 然后我转向“访问被拒绝”错误,我遇到的所有 Material 都指向一个关于使用 AJAX 的跨域请求的问题。也有一些文章专门提到了文件上传,但在这种情况下,没有任何内容与我 100% 相关。
问题
当我尝试在嵌入到 Facebook 的页面中使用 jQuery 时,为什么我在 Internet Explorer 中会收到这些错误?即使我删除了页面上的所有其他脚本(jQuery 除外),我也得到了它们,所以我假设它是由我在页面上处理图像上传的隐藏 iframe 的存在触发的。
最佳答案
首先,我删除了页面上的所有其他脚本,此时我只收到以下错误(显然是因为我不再尝试使用 $
):
- 脚本 5:访问被拒绝。
在尝试了我在 Internet 上找到的大约一打东西(以及它们的组合)之后,我决定使用 jQuery 的非缩小版本,以便我可以更准确地确定导致我的问题的行。上传并再次查看控制台后,我被指向第 1513 行,如下所示:
if ( parent && parent.frameElement ) {
此行上方是一条注释,记录了我遇到的问题:
// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
我用 Google 搜索了 jQuery #13936
和 came across this page ,这表明我将上面的行替换为:
if ( parent && parent.attachEvent && parent !== parent.top ) {
进行此更改后,我很高兴发现问题已解决并且我的表单按预期工作。我再次仔细检查了其他浏览器,可以确认它们仍然按预期工作。
关于javascript - jQuery 在我的 Internet Explorer 中的 Facebook 应用程序中不起作用 - 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087806/