有没有办法在来自不同域的iFrame上运行书签?
例如,我有一个从http://example.com加载的页面,其中有一个iFrame,其源设置为http://example2.com。当我运行书签时,它总是在http://example.com上运行,因为那是主页面。我想在另一个iFrame上运行它。
当我尝试与iFrame进行互动时(例如,将其源属性更改为javascript:alert('test')
),Chrome会显示以下错误:
不安全的JavaScript尝试从包含网址http://example.com的网址访问包含网址http://example2.com的框架。域,协议和端口必须匹配。
我尝试将书签拖放到框架中,但它说:
无法加载资源
我有什么方法可以使用Chrome中的书签与iFrame交互?
答案 0 :(得分:3)
有一种方法可以使用window.postMessage
进行跨域消息传递(而不是任意代码执行),但是所有帧A都可以做到帧B(当它们不属于same origin时)传递一条消息,希望B有一个回调函数来监听这条消息。
所以在这里,如果您控制exemple2.com(框架中没有获得书签的内容),您可以让bookmarklet将消息传递给iframe并在iframe中处理它。
否则我认为你没有解决方案,除了非常复杂的解决方案(如代理)。
其他链接:
答案 1 :(得分:1)
iFrames和ajax调用一样具有很多安全性。
任何以跨域方式使用这些操作的尝试都将导致安全性错误。
想象一下,您可以与不同域上的其他iFrame进行交互。您可以制作宽度和高度均为100%的iFrame(如facebook登录页面)并添加一个函数以在提交事件上执行,该事件将通过电子邮件向您发送用户名并在提交之前传递。
所以你要完成你想要做的事情会有很多麻烦。你基本上不能搞乱你不拥有的页面。您可以使用firebug来编辑html选项卡。
希望有所帮助
答案 2 :(得分:1)
如果您无法控制页面或iframe,则可以选择将iframe加载到新窗口中。 iframe的src
属性可供父JS读取,然后可以打开新的选项卡或窗口。然后,用户可以再次单击书签,将其加载到新页面中。