我正在构建一个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触发方法。
非常感谢任何帮助。
答案 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证明了这一点。