【问题标题】:Populate local div with external script results使用外部脚本结果填充本地 div
【发布时间】:2023-03-23 19:47:02
【问题描述】:

我在一个站点上使用 Angular 和 JQuery,并将页眉和页脚设置为部分,以便最大限度地重复使用。我遇到的问题是我需要在加载时在页脚中处理一些 javascript,但 Angular 通过 ng-include 标签或使用 $.load() 方法的 JQuery 不支持。

我有多个要运行的第 3 方脚本,但我现在正在处理的一个是 Verisign 脚本之一,它返回一个图像,该图像是使用 <script src=""></script> 模式加载的。我知道至少目前 Javascript 无法引入外部脚本,所以我的想法是简单地创建一个容器 div,我希望图像出现在其中,从主页运行第 3 方脚本,然后获取该内容并通过引用填充容器 div,概念上如下所示:

//footer.html
<div id="siteVerify"></div>

//index.html
//call a method that takes 3rd party that i can point to siteVerify

是否可以将第 3 方脚本指向 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 值是什么时,它总是返回“未定义”。

我感觉我的选择器可能是错误的,但我看不出它们是什么。

【问题讨论】:

  • 如果我错了,请纠正我 - 但是当您从 ajax 加载新数据时,您基本上是否遇到问题,新数据中有 &lt;script&gt; 标签,而这些标签没有触发当你把它们放在页面上?还是我误会了?
  • 这是根本问题,是的。我需要在加载部分时评估脚本,或者从主页运行它并获取内容并在部分中填充标记。从我读过的所有内容来看,不支持在加载部分时评估
  • 查看我的答案,让我知道这是否适合您

标签: javascript jquery angularjs


【解决方案1】:

当您使用 AJAX 加载脚本标签时,问题是它们被作为 放置 您想要的位置引入,因此它不会触发。不过,有一种简单的方法可以恢复这些死脚本,所以你很幸运!

从 AJAX 请求中获取数据后,请评估任何内部 JavaScript。

对于外部 JavaScript,您需要做的是创建一个新的 &lt;script&gt; 标记并为其提供死脚本的源代码。

加载新数据后,整个过程应如下所示:

// 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);
        }
    }
});

【讨论】:

  • 所以在这个过程中,我会为每个脚本添加一个名为“deadScriptContainer”的类属性?
  • 那个容器基本上就是死脚本所在的地方。因此,例如,如果您将所有新数据加载到某个 div,您希望定位该 div 中的所有脚本标签。
  • 好的,所以我将脚本放在标记为“deadScriptContainer”的容器中,它会查看内部并找到要处理的任何脚本
  • 好吧,只要定位到你的死脚本基本上就在哪里。 “DeadScriptContainer”是任意的
  • 对,我是根据你的例子说的,不一定要叫'deadscriptcontainer'
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 2018-06-05
  • 2012-01-22
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多