jQuery在MTurk上,为什么Chrome报告“Unsafe JavaScript attempt to access frame with URL”?

4

我在MTurk HIT中使用jQuery做了几件事情,我猜测其中一个可能是罪魁祸首。我不需要从iframe访问周围的文档,所以如果我这样做了,我想知道发生了什么以及如何停止它!

否则,MTurk可能会做一些不正确的事情(例如,在iframe URL中使用5个字符的令牌&来分隔URL参数,因此他们绝对会做错误的事情)。

以下是可能导致问题的代码片段。所有这些都来自嵌入在MTurk HIT **(以及相关)页面中的iframe中:

  1. 我正在将我的JS嵌入到$(window).load()中。据我所知,我需要使用这个而不是$(document).ready(),因为后者不会等待我的iframe加载。如果我错了,请纠正我。

  2. 我还在window.location.href上运行RegExp.exec来提取workerId。

如果这是重复的问题,我提前道歉。事实上,在我写完这篇文章后,SO似乎已经猜到了:调试“尝试访问URL为...的不安全JavaScript框架”。如果在你之前我找到了答案,我会回答这个问题。

能够获得一个很好的高级参考资料来学习这种东西将是很棒的。它并不自然地适用于我所知道的任何主题 - 或许要学习有关跨站点脚本编写,以便我可以避免它?

** 如果您不知道,MTurk HIT是MTurk上从事任务的人们的工作单位。如果您导航到http://mturk.com并查看HIT,您可以很快看到它们的样子。

我已经追踪代码到jquery中的以下块中,并在inject.js文件中运行:

try { isHiddenIFrame = !isTopWindow && window.frameElement && window.frameElement.style.display === "none"; } catch(e) {}


继续做一些调查:window.location.href正在访问iframe的src。所以,这似乎是完全合法的。此外,http://www.nczonline.net/blog/2009/09/15/iframes-onload-and-documentdomain/表明iframe拥有它自己的`window`对象。话虽如此,如果我禁用JavaScript,问题就会消失……所以现在我更加了解了,但也更困惑了 :) - Dav Clark
嗯 - 我不认为这个问题已经“解决”了。但无论如何,问题似乎发生在我使用jQuery时(所以我“导致”了它),但它只发生在HIT的worker / public视图上,而不是requester / developer侧。因此,亚马逊也在做一些具体的事情。实际上这是一个捕获的异常。所以,我不明白为什么在javascript控制台中会出现它。请参阅上面代码中的位置。 - Dav Clark
2个回答

4

Rad。我现在正转向一些MTurk的黑客活动,所以你的解决方案出乎意料地及时,考虑到我的问题已经存在了很长时间! - Dav Clark
太棒了,很高兴能帮助到你。 - user3204875

2

这并不是针对你问题的直接回答,但我们实验室成功地通过要求工人点击iframe内部的一个按钮来绕过(即黑客攻击)这个问题。点击按钮会打开一个单独的弹出窗口,在该弹出窗口中,您可以自由使用jQuery和任何其他标准JS资源,而不触发AMT的任何安全警报。此方法还有一个额外的好处,即允许工人在全尺寸的浏览器窗口中查看您的任务,而不是AMT的小型嵌入式iframes。


我的“解决方案”是忽略它,因为它并不会引起任何问题。只是让我担心,因为我不明白为什么会出现这个问题。但还是感谢分享! - Dav Clark

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