我正在网站上使用Angular和JQuery,并将页眉和页脚设置为部分,以便最大限度地重复使用。我遇到的问题是我需要在加载时在页脚内处理一些javascript,但是Angular不会通过ng-include
标记或JQuery使用$.load()
方法支持。
我有多个第三方脚本要运行,但我现在正在处理的是其中一个返回图像的Verisign脚本,该脚本使用<script src=""></script>
模式加载。我知道至少目前Javascript没有办法引入外部脚本,所以我的想法是简单地创建一个容器div,我希望图像出现,从主页运行第三方脚本,然后到获取该内容并通过引用填充容器div,概念上看起来像这样:
//footer.html
<div id="siteVerify"></div>
//index.html
//call a method that takes 3rd party that i can point to siteVerify
是否可以将第三方脚本指向siteVerify div而不在div中运行脚本?
相反,如果有一种替代的首选方法可以重复使用html代码,这样我就可以在一个地方编辑更改并让它们在整个网站中进行推广?
编辑:
我说:
// If you know these dead scripts will be in a certain container, refine your jQuery selector
$(document).ready(function(){
// If you know these dead scripts will be in a certain container, refine your jQuery selector
$('.deadScriptContainer script').each(function(){
// If a script has content, we want to execute it
if($(this).html().length > 0){
// Eval() will execute any JavaScript it is passed
eval($(this).html());
}else{
// If this script has no content, let's see if it has a src
if($(this).src){
// Create a new script tag
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = $(this).src;
// Append new script to the head
document.querySelector("head").appendChild(newScript);
}
}
});
});
进入js文件,并在index.html文件的底部调用它。同时在我的页脚中,我有类似的东西:
<div class='deadScriptContainer'><span id='siteseal'>
<script type="text/javascript" src="https://seal.godaddy.com/getSeal?sealID=...."></script></span>
</div>
所以它应该在div中使用类'deadScriptContainer'找到脚本标记,然后查找它的src,它应该是https:....我在代码中放了一个警告,它确实似乎是找到脚本标记,但是当我检查src值是什么时,它总是返回'undefined'。
我有一种感觉,我的选择器可能是错的,但我看不出它们是什么。
答案 0 :(得分:1)
当您使用AJAX加载脚本标记时,问题是它们会以放置的方式引入您想要的地方,因此它不会被触发。有一种简单的方法可以恢复这些死亡的剧本,所以你很幸运!
从AJAX请求中恢复数据后,请评估所有内部JavaScript。
对于外部JavaScript,您需要做的是创建一个新的<script>
标记并为其提供死亡脚本的来源。
一旦您加载了新数据,整个过程应该如下所示:
// If you know these dead scripts will be in a certain container, refine your jQuery selector
$('deadScriptContainer script').each(function(){
// If a script has content, we want to execute it
if($(this).html().length > 0){
// Eval() will execute any JavaScript it is passed
eval($(this).html());
}else{
// If this script has no content, let's see if it has a src
if($(this).src){
// Create a new script tag
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = $(this).src;
// Append new script to the head
document.querySelector("head").appendChild(newScript);
}
}
});