[英]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.