我有逻辑工作从父母
追加到我的iframe这有效:
$('#iframe').load(function() {
$(this).contents().find('#target').append('this text has been inserted into the iframe by jquery');
});
这不是
$('#iframe').load(function() {
$(this).contents().find('body').append('<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>');
});
.lf
问题与插入的脚本标记无法正确转义有关。 一半的javascript在html中变得可见,就像第一个脚本标签突然结束一样。
答案 0 :(得分:11)
可能错误在于您的字符串,从不在javascript中使用文字&lt;创建字符串/ script&gt; 。中。
$('#iframe').load(function() {
$(this).contents().find('body').append('<scr' + 'ipt type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></scr' + 'ipt>');
});
答案 1 :(得分:7)
我有点意外,因为它不起作用 [编辑:不再感到惊讶,请参阅mtrovo's answer。] ......但这里是我做了什么,根据你的评论,主要是非jQuery,但仍然非常简短:
var rawframe = document.getElementById('theframe');
var framedoc = rawframe.contentDocument;
if (!framedoc && rawframe.contentWindow) {
framedoc = rawframe.contentWindow.document;
}
var script = doc.createElement('script');
script.type = "text/javascript";
script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js";
framedoc.body.appendChild(script);
偏离主题:我真的不会为ID“iframe”提供iframe(或其他任何内容)。这只是感觉它有问题(IE有命名空间问题,虽然我不知道它混淆标签名称和ID,但我不会完全震惊)。我上面使用了“theframe”。
答案 2 :(得分:4)
警告:以这种方式加载脚本会使脚本在主窗口上下文中运行 即:如果您使用somescript.js中的窗口,它将是 NOT iframe的窗口!
$('#iframe').load(function() {
$(this).contents().find('body').append('<scr' + 'ipt type="text/javascript" src="somescript.js"></scr' + 'ipt>');
});
能够使用iframe上下文注入脚本:
function insertScript(doc, target, src, callback) {
var s = doc.createElement("script");
s.type = "text/javascript";
if(callback) {
if (s.readyState){ //IE
s.onreadystatechange = function(){
if (s.readyState == "loaded" ||
s.readyState == "complete"){
s.onreadystatechange = null;
callback();
}
};
} else { //Others
s.onload = function(){
callback();
};
}
}
s.src = src;
target.appendChild(s);
}
var elFrame = document.getElementById('#iframe');
$(elFrame).load(function(){
var context = this.contentDocument;
var frameHead = context.getElementsByTagName('head').item(0);
insertScript(context, frameHead, '/js/somescript.js');
}