2014-06-27 77 views
2

只有满足条件,我才想加载并执行外部JavaScript文件(Google Adwords的转换脚本)。类似的问题已经被问到,我已经尝试过他们的解决方案,但它不起作用。我有以下代码:有条件地加载和执行外部js文件

<script> 
     $(function() { 
      if ([condition]) { 
       $.getScript('//www.googleadservices.com/pagead/conversion.js'); 
      } 
     }); 
</script> 

脚本已加载但未执行。我该怎么做才能执行它?

我试着

var script = document.createElement("script"); 
script.setAttribute("src", "//www.googleadservices.com/pagead/conversion.js"); 
document.getElementsByTagName("head")[0].appendChild(script); 

改变getScript加入(),但它并没有正常工作。

谢谢!

@VLAS:哎呀粘贴错误的事情,纠正

@ejay_francisco:我已经尝试过创建脚本标签并将其附加到头部,但它不工作

@Barar:我的意思是该页面下载脚本文件但不执行它。是的,如果你想要的全码:

<!-- Google Code for Formulaire Contact Conversion Page --> 
     <script type="text/javascript"> 
      /* <![CDATA[ */ 
      var google_conversion_id = [...]; 
      var google_conversion_language = "en"; 
      var google_conversion_format = "3"; 
      var google_conversion_color = "ffffff"; 
      var google_conversion_label = "[...]"; 
      var google_remarketing_only = false; 
      /* ]]> */ 
     </script> 
     <!-- <script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js"></script> --> 
     <script type="text/javascript" src="//code.jquery.com/jquery.min.js"></script> 
     <script> 
     $(function() { 
      if ([condition]) { 
       $.getScript('//www.googleadservices.com/pagead/conversion.js'); 
       $("#google_conversion").attr('src','//www.googleadservices.com/pagead/conversion/[...]/?label=[...];guid=ON&amp;script=0'); 
      } 
     }); 
     </script> 
     <div style="display:inline;"> 
      <img id="google_conversion" height="1" width="1" style="border-style:none;" alt="" src="#"/> 
     </div> 
+0

怎样才可以装没有被执行?这就是加载的功能。 – Barmar

+0

为什么在_regScript_上设置src属性并追加_script_变量? –

+0

[this](http://stackoverflow.com/questions/24446439/how-to-remove-loaded-script-and-add-new-script/24446625#24446625)链接可能会对你有所帮助 – Yaje

回答

2

从长远来看,您最好使用proper asynchronous version of the adwords conversion script我认为它是专门为处理这些事情而构建的。这样可以避免任何编码错误,并且更易于阅读和维护。

所以,在此基础上这里就是我想你会想(虽然我没有jQuery的专家 - 我更喜欢使用standard javascript但嘿每到自己):

<head> 
    <!-- Add the async conversion script as usual - use async if you want ---> 
    <script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion_async.js" charset="utf-8"></script> 
</head> 

<!-- the rest of your site HTML and code --> 

<script> 
$(function() { 
    if ([condition]) { 
    window.google_trackConversion({ 
     google_conversion_id: "[...]", 
     google_conversion_language: "en", 
     google_conversion_format: "3", 
     google_conversion_color: "ffffff", 
     google_conversion_label: "[...]", 
     google_conversion_value: 0, 
     google_remarketing_only: false 
    }); 
    } 
}); 
</script> 
+0

忘了回答,这工作谢谢你!我不明白为什么谷歌不提出这个版本的脚本,它在很多情况下非常有用 – user3782513

+0

很高兴它的工作。他们确实分发这个版本!它位于https://developers.google.com/adwords-remarketing-tag/asynchronous/ – matt1

0

试试这个:

<script type="text/javascript"> 
    $(document).ready(function(){ 
    if ([condition]) { 
var script = document.createElement("script"); 
script.type = "text/javascript"; 
script.src = "http://www.googleadservices.com/pagead/conversion.js"; 
document.getElementsByTagName("head")[0].appendChild(script); 
    } 
    }); 
</script> 
+0

您认为改变了什么? – Barmar

0

试试这个:

$(function() { 
    if ([condition]) { 
     $.getScript('//www.googleadservices.com/pagead/conversion.js', function() { 
      $("#google_conversion").attr('src','//www.googleadservices.com/pagead/conversion/[...]/?label=[...];guid=ON&amp;script=0'); 
     }); 
    } 
}); 

这不设置的#google_conversionsrc直到conversion.js脚本后被加载。如果存在依赖关系,则需要按照正确的顺序进行操作。您首先执行此操作,因为$.getScript是异步的。

+0

Mmh实际上没有看到网络日志中的呼叫来自图像标记中的链接。实际上,我认为脚本被执行了,问题在别的地方,因为在'Document'上有'写'失败的错误信息:从异步加载的外部脚本写入文档是不可能的,除非它是明确打开“。你有更多的想法吗? – user3782513

+0

对不起,没有。我不确定为什么'conversion.js'会尝试使用'document.write()'。这通常由完全替换文档的广告脚本使用,而不是仅修改页面行为的脚本。 – Barmar