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

Sen*_*ful 16 javascript security iframe bookmarklet

有没有办法在来自不同域的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交互?

qwe*_*ymk 2

iFrame 与 ajax 调用一样具有很高的安全性。

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

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

所以你在完成你想做的事情时会遇到很多困难。您基本上不能弄乱不属于您的页面。不过,您可以使用 firebug 通过 html 选项卡来编辑它。

希望有帮助

  • 那么,您可以在不属于您的页面上运行小书签。问题是它在托管 iFrame 的主页上运行书签,而我想做相反的事情。 (12认同)
  • `javascript: (function(user) { var $voteUp = $('.user-details:contains(' + user + ')').parents('.answer').find('[class^=vote-up ]'); window.scrollTo(0, $voteUp.offset().top - 50); (functionblink() { $voteUp.fadeOut('fast', function() { $(this).fadeIn('fast) ',眨眼)}) })() })('qwertymk')` (3认同)
  • @Senseful 我相信允许使用书签,因为用户必须实际单击它们才能启动脚本。相比之下,在 qwertymk 使用“全屏”iframe 窃取凭据的示例中,用户正在访问的页面(包含 iframe)执行代码,而不是用户,因此存在安全问题,因此浏览器安全功能会阻止这是不可能的。 (3认同)