繁体   English   中英

在来自不同域的iFrame上运行bookmarklet

[英]Running a bookmarklet on an iFrame that is coming from a different domain

有没有办法在来自不同域的iFrame上运行bookmarklet?

例如,我有一个从http://example.com加载的页面,它有一个iFrame,其源代码设置为http://example2.com 当我运行bookmarklet时,它总是在http://example.com上运行,因为那是主页面。 我想在另一个iFrame上运行它。

当我尝试与iFrame交互时(例如,通过将其源属性更改为javascript:alert('test') ),Chrome会显示以下错误:

不安全的JavaScript尝试与URL访问框架http://example.com从框架与URL http://example2.com 域,协议和端口必须匹配。

我尝试将书签拖放到框架中,但它说:

无法加载资源

有没有办法让我在Chrome中使用书签与iFrame交互?

有一种方法可以使用window.postMessage进行跨域消息传递(而不是任意代码执行),但是所有帧A都可以对帧B(当它们不是同一个源 )做的时候传递一个消息希望B有一个回调函数侦听此消息。

所以这里如果您控制exemple2.com(框架中没有得到书签的内容),您可以让书签将消息传递给iframe并在iframe中处理它。

否则我认为你没有解决方案,除了非常复杂的解决方案(如代理)。

其他链接:

如果您不控制页面或iframe,则可以选择将iframe加载到新窗口中。 iframe的src属性可供父JS读取,然后可以打开新的选项卡或窗口。 然后,用户可以再次单击书签,将其加载到此新页面中。

与ajax调用一样,iFrame对它们有很多安全性。

任何以跨域方式使用这些的尝试都将导致安全性错误。

想象一下,您可以与不同域上的其他iFrame进行交互。 您可以制作宽度和高度均为100%的iFrame(如facebook登录页面)并添加一个函数来执行提交事件,该事件将通过电子邮件向您发送用户名并在提交前通过。

所以你要完成你想要做的事情会有很多麻烦。 你基本上不能搞乱你不拥有的页面。 您可以使用firebug来编辑html选项卡。

希望有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM