javascript - 加载 iframe 后在 iframe 中执行 JavaScript 代码?

标签 javascript iframe execute loaded

我希望能够在其他人的页面中执行代码。

为了便于理解,这里举个例子:

假设我想在加载后更改某些 iframe 页面的颜色:

 document.body.style.backgroundColor = "#AAAAAA";

 document.getElementById('targetFrame').contentWindow.targetFunction();

最佳答案

如果是别人的页面。没有对方的一些合作,你根本无法做到这一点。想一想如果像您这样的随机人员可以针对其他开发人员编写的应用程序任意运行代码,这会对 Web 安全产生什么影响?虽然我确定您的品格良好,但有足够多的人道德败坏,认为这会成为数据安全的一个大问题。

话虽如此,此安全规则也有异常(exception);然而。

例如,如果其他 Web 开发人员允许您在他或她的页面上执行代码,您可以使用 HTML5 window.postMessage API 将消息从一个上下文传递到另一个上下文,然后在该消息执行时运行命令收到。

澄清一下,这需要其他开发人员在他/她的网站上注册一个监听器,以监听从您的网站发送的事件。

您同事网站上的代码:

// register to listen for postMessage events
window.addEventListener("message", changeBackground, false);  

// this is the callback handler to process the event
function changeBackground(event)  
{  

  // you're colleage is responsible for making sure only YOU can
   // make calls to his/her site!
  if (event.origin !== "http://example.org:8080")  
    return;  

  // event.data could contain "#AAAAAA" for instance
  document.body.style.backgroundColor = event.data;
  // do other stuff
  }
}  

您的代码:

// pass the string "#AAAAAA" to the iframe page, where the changeBackground
 // function will change the color
document.getElementById("theIframe").contentWindow.postMessage("#AAAAAA", targetOrigin);

为了在 iframe 完成加载时执行此代码,您当然需要能够检测到这一点,这可以通过使用 iframe's load event 来完成。或者让你的同事 use postMessage in reverse, to notify you to fire your event. .

有关更多信息,请查看 HTML5 Specification on Web Messaging .

关于javascript - 加载 iframe 后在 iframe 中执行 JavaScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671436/

相关文章:

python - 在 Chef Recipe 中执行requirements.txt文件来安装python模块的正确方法是什么?

javascript - 如何在 HTML 表单中捕获键盘输入

设置背景颜色样式的 JavaScript 函数

mysql - 使用sqlalchemy同时执行多条sql语句

javascript - 如何在点击div时执行代码?

html - 是否可以使用 <iframe> 在我的网站上显示 100% 的另一个网站?

javascript - ASP.NET:将数据从客户端发送到服务器

javascript - MVC4中是否可以通过选择单选按钮的文本来淡入淡出?

javascript - 使用 JavaScript 仅重新加载一次 HTML 页面

html - 带有 css 固定位置 : possible? 的 iframe