2017-10-18 82 views
1

今天发生了一件奇怪的事情,它正在测试我正在开发的一个网站:我试图用jquery访问iframe中的元素,令我惊讶的是我能够访问它们并修改它们。令人惊讶的是,因为iframe不在同一个域中,因此我不应该为“同源策略”做到这一点(或者我错了?)。使用jQuery查看iframe内容后使用浏览器

问题是,它只能在用浏览器“检查”任何iframe的元素之后才能完成(本例中为chrome)。如果稍后我“检查”不在iframe内的任何网站元素,那么我将失去该“超级大国”并获得预期结果,即由于“同源策略”而不允许jquery访问。

问题: 1.-这是否应该发生? 2.-如果它可能暗示安全风险,是否有办法阻止它? 3.-如果这是假设发生,是安全的,我怎么能jQuery的“模拟”浏览器的“检查”,让我能访问内部框架元素和修改它们

+0

你在控制台上运行jQuery吗? –

+0

是的,所描述的测试是来自Chrome的控制台 – Roberto

+1

在控制台中,您可以选择希望运行JavaScript的帧级别。因此,您可以在页面内的任何iframe中运行jQuery,而不考虑源。如果您确定您在* top *框架中运行JavaScript,并从那里访问不同的原始iframe,那么这将意想不到(我必须自己尝试复制它以收集更多信息)。 –

回答

0

当你检查的iframe(测试Chrome),它会自动将控制台的上下文设置为iframe的上下文。因此,您可以直接在iframe的内容上运行任何JavaScript。但是它无法从父级(iframe被实例化的地方)访问它,因为这样的行为可能被视为安全缺陷。

举个例子,当你尝试在父上下文的访问(在这种情况下,父亲是的jsfiddle的iframe的哟天亚社看到左上方): Accessing from parent context

,然后当我切换上下文到iframe的我试图访问: Accessing from the iframe's context

希望这总结的答案,可以帮助其他人可能有类似的问题。

+0

非常感谢Alex为您的耐心和时间。将您的文字作为对我的问题的回应进行解释: – Roberto

+1

非常感谢Alex为您的耐心和时间。将您的文本解释为对我的问题的回应:回复1.-是的,这是假设发生的,但仅在浏览器的控制台中出现,而不是用于编码的js或jquery。回应2.-无需阻止它,因为它只能从浏览器的控制台手动完成(这是安全的)。 3.-你不能jquery“模拟”浏览器“检查”访问iframes元素并修改它们。 – Roberto

相关问题