【问题标题】:How can I execute the code inside a <script></script> only when I'll show its container?仅当我将显示其容器时,如何才能在 <script></script> 中执行代码?
【发布时间】:2012-01-16 16:17:45
【问题描述】:

我有this 代码:

HTML

<a href="javascript:void(0);" id="showDiv">Show Agency</a>

<div id="invisibleDiv">
    <script src="http://platform.linkedin.com/in.js" type="text/javascript"></script>
    <script type="IN/CompanyProfile" data-id="1035" data-format="inline" data-related="false"></script>
</div>

jQuery

$("#showDiv").click(function () {
    $("#invisibleDiv").show();
});

CSS

#invisibleDiv
{
    display:none;
}

当我加载页面时,我会看到从外部源加载的脚本,即使 div 被隐藏也是如此。脚本调用一些 API 并生成 HTML/Javascript。

好吧,我正在寻找的是如果隐藏父级,则强制卸载脚本;然后,当我展示它时(通过链接),将脚本加载到 div 中。

我该怎么做?我会避免使用 AJAX。

【问题讨论】:

    标签: javascript jquery html ajax social-networking


    【解决方案1】:

    更新:

    <a href="#" id="showDiv">Show Agency</a>
    <div id="invisibleDiv">
    <script type="IN/CompanyProfile" data-id="1035" data-format="inline" data-related="false"></script>
    </div>
    
    $(function() {
        $("#showDiv").click(function() {
            $.getScript("http://platform.linkedin.com/in.js");
        });
    });
    

    【讨论】:

      【解决方案2】:

      如果我理解正确,您只是想延迟运行第三方提供的任意脚本?像这样的东西有用吗?

      <div id="invisibleDiv" style="display:none">Please wait while we load some stuff from Facebook...</div>
      
      $("#showDiv").click(function(){
          $("#invisibleDiv").show().load("http://facebook.com/whatever/andStuff");
      });
      

      缺点是您无法预取 HTML 内容,但我没有看到任何其他方式。

      编辑:好的,看起来你在我输入这个问题时编辑了这个问题......所以你控制了 invisibleDiv 的内容,但你想延迟 in.js 的加载?试试这个...

      $("#showDiv").click(function(){
          $("#pleaseWaitDiv").show();
          $.getScript("http://platform.linkedin.com/in.js", function(){
              $("#pleaseWaitDiv").hide();
              $("#invisibleDiv").show();
          });
      });
      

      再次,您必须让用户在脚本下载时等待,因此我添加了 pleaseWaitDiv

      更多编辑: 新建一个脚本节点并附加它。

      var scriptNode = $("<script></script>")
          .attr("type","IN/CompanyProfile")
          .attr("data-id","1035")
          .attr("data-format","inline")
          .attr("data-related","false");
      
      $("#invisibleDiv").append(scriptNode);
      $.getScript("http://platform.linkedin.com/in.js", function(){
          $("#pleaseWaitDiv").hide();
          $("#invisibleDiv").show();
      });
      

      【讨论】:

      • 是的,但是你不能用这种方法“加载”带有属性的源,例如&lt;script type="IN/CompanyProfile" data-id="1035" data-format="inline" data-related="false"&gt;&lt;/script&gt;
      • 噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢!您可以创建一个脚本元素并自己附加它。给我一秒钟进行第三次编辑:p
      【解决方案3】:

      您可以将其绑定到您的 showDiv 点击函数,内联脚本会立即处理...我唯一能想到的另一件事是通过您不想要的 ajax 加载脚本。

      【讨论】:

      • 是的,我应该!但它不是我要找的 :) 事实上,我必须从 src 加载一些脚本到 div 中,而不是警报 :)
      【解决方案4】:

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 2022-11-23
        • 2011-09-19
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 1970-01-01
        相关资源
        最近更新 更多