4

我在 MTurk HIT 中使用 jQuery 做一些事情,我猜其中一个是罪魁祸首。我不需要从 iframe 访问周围的文档,所以如果我是,我想知道发生在哪里以及如何阻止它!

否则,MTurk 可能会做一些不正确的事情(他们使用 5 个字符的标记&例如,他们使用 5 个字符的标记来分隔 iframe URL 中的 URL 参数,因此他们肯定会做不正确的事情)。

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

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

  2. 我还在运行 RegExp.execwindow.location.href来提取 workerId。

如果这是重复的,我提前道歉。确实 - 在写完这篇文章之后,SO似乎对此做出了很好的猜测:调试“不安全的javascript尝试访问带有URL的框架......”。如果我在你之前弄清楚,我会回答这个问题。

获得有关在哪里了解此类事情的良好高级参考资料会很棒。它不适合我知道的任何主题 - 也许了解跨站点脚本以便我可以避免它?

** 如果您不知道,MTurk HIT 是人们在 MTurk 上执行任务的工作单元。如果您导航到http://mturk.com,您可以很快看到它们的外观并查看 HIT,

我已经从 inject.js 文件将代码跟踪到 jquery 中运行的以下块:

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

4

2 回答 2

4

我通过 Chrome 在 MechanicalTurk 中运行 jQuery 时遇到了类似的问题。我的解决方案是下载我想要的 jQuery JS 文件,然后将它们上传到安全的亚马逊 S3 服务。
然后,在我的 HIT 中,我在他们的新家https://s3.amazonaws.com调用了 .js 文件。

有关如何按照 chrome 标准使代码“安全”的提示在这里:http: //developer.chrome.com/extensions/contentSecurityPolicy.html

于 2014-01-17T01:45:19.447 回答
2

这不是您问题的直接答案,但我们的实验室通过要求工作人员单击 iframe 内打开一个单独的弹出窗口的按钮,成功地规避了(阅读 hack)这个问题。在弹出窗口中,您可以自由使用 jQuery 和您想要的任何其他标准 JS 资源,而不会触发任何 AMT 的安全警报。这种方法的另一个好处是允许工作人员在全尺寸浏览器窗口中查看您的任务,而不是 AMT 的微型嵌入式 iframe。

于 2013-08-11T02:51:34.067 回答