javascript - jQuery 在我的 Internet Explorer 中的 Facebook 应用程序中不起作用 - 访问被拒绝

标签 javascript jquery internet-explorer facebook-iframe

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 #13936came across this page ,这表明我将上面的行替换为:

if ( parent && parent.attachEvent && parent !== parent.top ) {

进行此更改后,我很高兴发现问题已解决并且我的表单按预期工作。我再次仔细检查了其他浏览器,可以确认它们仍然按预期工作。

关于javascript - jQuery 在我的 Internet Explorer 中的 Facebook 应用程序中不起作用 - 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087806/

相关文章:

javascript - 如何删除所有最近的控制台命令

相当于 Rails try 方法的 Javascript

javascript - 动态添加的 dom 元素不响应 jQuery 函数

html - IE 中 UL 内的 float 元素低于 float 输入 - 但在 Chrome 中没问题

jquery - 使用 IP 而不是 localhost 时,IE8 jquery 调用无法正确返回

javascript - 使用 webqr 和 getusermedia 脚本扫描 QR 码

javascript - 更新嵌套数组 - React Native

javascript - 运行带有Ajax问题的Python

javascript - 在多个对象中查找相同的键

internet-explorer - 最小高度 CSS 中的最小高度