【问题标题】:How to transform this script to be called from a jquery event?如何转换此脚本以从 jquery 事件中调用?
【发布时间】:2014-11-28 15:48:51
【问题描述】:

我有以下脚本,我想将其转换为可以通过单击调用的内容:

<script type="text/javascript"> if (!window.mstag) mstag = {loadTag : function(){},time : (new Date()).getTime()};</script> 
<script id="mstag_tops" type="text/javascript" src="//flex.msn.com/mstag/site/+values+/mstag.js"></script> 
<script type="text/javascript"> mstag.loadTag("analytics", {dedup:"1",domainId:"+values+",type:"1",actionid:"+values+"})</script> 
<noscript> <iframe src="//flex.msn.com/mstag/tag/+values+/analytics.html?dedup=+values+" frameborder="0" scrolling="no" width="1" height="1" style="visibility:hidden;display:none"> </iframe> </noscript>

我想按照下面脚本的方式来做:

<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = +values+;
var google_conversion_language = "en";
var google_conversion_format = "+values+";
var google_conversion_color = "ffffff";
var google_conversion_label = "+values+";
var google_remarketing_only = false;
/* ]]> */
</script>
<script type="text/javascript" src="//www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="//www.googleadservices.com/pagead/conversion/+values+/?label=+values+;script=0"/>
</div>
</noscript>

已处理in this thread,建议的解决方案如下:


// 这为 jQuery 负责。代码可以很容易地适应其他 javascript 库:

        function googleTrackingPixel() {
            // set google variables as globals
            window.google_conversion_id = 1117861175
            window.google_conversion_language = "en"
            window.google_conversion_format = "3"
            window.google_conversion_color = "ffffff"
            window.google_conversion_label = "Ll49CJnRpgUQ9-at5QM"
            window.google_conversion_value = 0

            var oldDocWrite = document.write // save old doc write

            document.write = function(node){ // change doc write to be friendlier, temporary
                $("body").append(node)
            }

            $.getScript("http://www.googleadservices.com/pagead/conversion.js", function() {

                setTimeout(function() { // let the above script run, then replace doc.write
                    document.write = oldDocWrite
                }, 100)

            })
        }

// 你会在你的脚本中这样调用它:

$("button").click( function() {
   googleTrackingPixel()
})

但是由于原始脚本 sn-ps 的结构不同,我不知道如何以相同的方式进行。这个怎么也能变身?

编辑: 我应该这样做吗? -

        function newScript() {
            if (!window.mstag) mstag = {loadTag : function(){},time : (new Date()).getTime()};
            mstag.loadTag("analytics", {dedup:"1",domainId:"+values+",type:"1",actionid:"+values+"})


            var oldDocWrite = document.write // save old doc write

            document.write = function(node){ // change doc write to be friendlier, temporary
                $("body").append(node)
            }

            $.getScript("//flex.msn.com/mstag/site/+values+/mstag.js", function() {

                setTimeout(function() { // let the above script run, then replace doc.write
                    document.write = oldDocWrite
                }, 100)

            })
        }

【问题讨论】:

  • 您到底想达到什么目的?为什么不能只创建一个 function() 并将两个脚本 sn-ps 包装在里面?所以 变成
  • @HywelRees 我只是不知道该怎么做,因为我不是程序员。我已经编辑了我的问题并尝试按照你的建议编造一些东西,但我认为这不是正确的方法。

标签: javascript jquery bing


【解决方案1】:

好的,

如果我理解正确的话,你只是想把脚本封装成一个函数,这样就可以绑定一个对象的点击事件。

您需要将它们保留在原处,一行导入 mstag.js(一个 javascript 库),我们无需担心 iframe。

<script id="mstag_tops" type="text/javascript" src="//flex.msn.com/mstag/site/+values+/mstag.js"></script> 
<noscript> <iframe src="//flex.msn.com/mstag/tag/+values+/analytics.html?dedup=+values+" frameborder="0" scrolling="no" width="1" height="1" style="visibility:hidden;display:none"> </iframe>   </noscript>

另外两行可以拆分成一个函数,如下:

<script type="text/javascript"> 

    function newScript() 
    {
        if (!window.mstag) 
        {
            mstag = { loadTag : function() {}, time : (new Date()).getTime()
        };

        mstag.loadTag("analytics", { dedup : "1", domainId: "+values+", type : "1", actionid : "+values+" });
    }

</script> 

然后,您将能够使用您提到的 jQuery 将此函数绑定到对象的单击事件:

$("button").on("click", newScript);

【讨论】:

  • 谢谢,但基本上这个脚本的目的是跟踪转化,最初它应该都在一个单独的“谢谢”页面中,但我想在用户点击后“计算”转化在某个按钮上。因此,将 sn-p 的任何部分保留在页面的原始代码中是不正确的。例如,如果我在同一页面中有noscript 部分,则每个访问者都将被视为一次转换,这当然是不对的......
猜你喜欢
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多