如何将<script>加载到iframe中?</script>

时间:2010-10-14 16:29:56

标签: javascript jquery iframe

我有逻辑工作从父母

追加到我的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中变得可见,就像第一个脚本标签突然结束一样。

3 个答案:

答案 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');
}