在动态创建的iframe中触发Javascript

时间:2014-05-30 21:24:39

标签: javascript jquery google-chrome iframe google-chrome-extension

我正在构建一个Chrome扩展程序,只要用户点击我的Chrome扩展程序的按钮,我就可以使用Iframe弹出一个弹出窗口。

在我的iFrame中,我正在加载2个.js文件:来自chrome扩展的jQuery和“modal.js”。 执行检查我可以看到文件已加载(modal.js),但是我使用的是以下代码,但未触发:

  $('#frameID').ready(function(){
    $('#sbm-new-group').click(function(){
      console.log("hello");
     });
  });

这不起作用,即使我尝试使用$(document).ready,也没有任何事情发生。我想知道是否还有使用iFrame中的javascript触发方法。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:7)

您应该访问iframe的document来绑定.ready()处理程序 这是demo fiddle

注意: 如果您在同一个域中,则可以这样做。

var iframe = document.getElementById('frameID'),
    iframeWin = iframe.contentWindow || iframe,
    iframeDoc = iframe.contentDocument || iframeWin.document;

$(iframeDoc).ready(function (event) {
    alert('iframe ready');
    // now you can access any element in the iframe (if same domain)
    $(iframeDoc).find('#sbm-new-group').on('click', function (event) {
         alert('clicked');
    });
});

[编辑] 额外备注:

  • 要调用 所有者 全局范围内的函数,来自iframe文档的

    parent.someMethod();

  • 要调用 iframe 全局范围内的函数,来自所有者文档的

    iframeWin.someMethod();

  • 要执行 iframe 中的脚本,来自所有者文档的

// this is called from the iframe
window.hello = function () {
    alert('hello from owner!');
};

// we'll write some scripts within the iframe that will be executed immediately
iframeDoc.open();
iframeDoc.write('\<script>alert("hello from iframe!");\<\/script>');
iframeDoc.write('\<script>parent.hello();\<\/script>');
iframeDoc.close();

以下another fiddle证明了这一点。