Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在div容器中动态调用异步脚本_Javascript_Jquery_Dom_Iframe - Fatal编程技术网

Javascript 在div容器中动态调用异步脚本

Javascript 在div容器中动态调用异步脚本,javascript,jquery,dom,iframe,Javascript,Jquery,Dom,Iframe,我使用Jquery/JS将外部脚本附加到div。我不能在头部包含外部脚本。我需要将它附加到使用Jquery创建的div中。外部脚本异步加载,使用document.write,我无法控制该脚本 我最终想要的是加载外部脚本并将其动态附加到div。我正在用JavaScript动态创建这个div。所以这只能在js中完成,不能在html中完成。如果我静态地将外部脚本放在html中,它会工作,但不会在div容器中呈现内容。但是,当我动态放置它时,它将不起作用 这是我试过的。但是我看不到脚本,也看不到在div

我使用Jquery/JS将外部脚本附加到div。我不能在头部包含外部脚本。我需要将它附加到使用Jquery创建的div中。外部脚本异步加载,使用document.write,我无法控制该脚本

我最终想要的是加载外部脚本并将其动态附加到div。我正在用JavaScript动态创建这个div。所以这只能在js中完成,不能在html中完成。如果我静态地将外部脚本放在html中,它会工作,但不会在div容器中呈现内容。但是,当我动态放置它时,它将不起作用

这是我试过的。但是我看不到脚本,也看不到在div中追加的对象。我需要将脚本放入div中,以便它在其中呈现内容

// this is the external code
// the externalscript.js takes in the value of externalprop1 & renders an iframe inside "div2" so externalobject has to be defined before the externalscript.js is called.  
var externalobject = {
    externalprop1 = "prop1"
};

var newscript      = document.createElement("script")
    newscript.type = "text/javascript"
    newscript.src  = "externalscript.js"

// end of external code

dynamic_content =  '<li>';
dynamic_content += '<div class=" div1">';
dynamic_content += '<div class="div2" id= "div2here"></div>';
dynamic_content += '</div>';
dynamic_content += '</li>';

若我的猜测是正确的,那个么将脚本放入div仅仅是因为需要从远程位置加载脚本

想法1:

也许托管远程脚本的服务器允许CORS。在这种情况下,您可以简单地使用jQuery getScript函数之类的函数来执行远程内容:

$.getScript( 'externalscript.js' );
有很多方法可以从远程位置获取和执行脚本(例如),但由于您无法加载远程内容,您可能应该坚持使用当前可用的JQuery或纯JavaScript

想法2:

若远程主机不支持CORS(浏览器在调试器控制台中抛出异常,但什么也并没有发生),那个么您可能有自己的服务器,可以将其用作代理?您的服务器可以下载所需的脚本,然后允许您的代码使用AJAX下载它(跨域或本地,取决于您正在修改的系统)。这样你就可以绕过科斯的限制

想法3:

最后,为什么您说您不能使用JavaScript将脚本放入头部?您是否尝试过(我认为在本例中,newscript应该用作jQuery对象):

如果我静态地将外部脚本放在html中,它会工作,但不会呈现内容 在div容器内。但是,当我动态放置它时,它将不起作用


如果您成功地将其添加到html中,可能可以将其添加到隐藏的div中,并且在需要时,可以将其移动到动态创建的div中。

您可以覆盖本机
文档。在加载外部脚本之前编写
方法。大概是这样的:

document.write = function (html) {
    document.getElementById('div2here').insertAdjacentHTML('beforeend', html);
};
var newscript = document.createElement("script");
                     :

document.write
,除了它不会擦除文档之外,几乎是一样的。

如果外部脚本使用
document.write()
,它是在解析时加载的,而不是在页面解析后加载的。你根本无法使用它,因为它将打开一个新文档并清除旧文档的所有内容。可能会获取原始脚本&查找/替换所有
文档。使用其他适当的DOM编写
调用manipulation@Teemu你的意思是我不能动态地将它附加到div2?我不能控制外部脚本&我不能操作它。还有其他的解决方法吗?可能是,如果你提供更多关于情况的上下文(例如脚本),你会得到更好的帮助。想法3:“它将在div容器中工作并呈现内容”,使用
document.write()
。这就是为什么不进入head,尽管它在
div
中也不起作用……我这样做了,但它不起作用。我试图隐藏它&然后通过将它追加到div中来隐藏它。show(),但它没有追加我应该在这里的document.getElementById('scripthere')中提供的id。不清楚。没有外部脚本的id,我看到您在这里
div2here
,我的代码段似乎继承了测试代码中的
id
。我已经解决了这个问题。哦,好的“beforeend”到底在做什么?它告诉方法在
#div2here
的末尾插入
html
。有关更多信息,请阅读我在答案中链接的MDN文章。
$('head').append( $( newscript ) );
document.write = function (html) {
    document.getElementById('div2here').insertAdjacentHTML('beforeend', html);
};
var newscript = document.createElement("script");
                     :