Javascript 如何在DNN codebehind中加载Facebook Pixel NoScript代码?

Javascript 如何在DNN codebehind中加载Facebook Pixel NoScript代码?,javascript,dotnetnuke,noscript,facebook-pixel,Javascript,Dotnetnuke,Noscript,Facebook Pixel,我们有一个带有自定义代码的结帐模块,该模块将为最终用户显示一个向导,当用户是经销商时,还将显示另一个多视图。我试图只在用户是最终用户时触发Facebook像素代码。我遇到的问题是NoScript代码,我无法在JavaScript函数中调用它。我也不想把它放在ASCX文件中的脚本标记之后,因为只有在生成发票时才会调用其余的像素代码,并且Facebook pixel Helper浏览器扩展因此给出错误。我试图拆分脚本和NoScript代码。在下面的代码隐藏中,我正在根据我设置的模块设置设置Faceb

我们有一个带有自定义代码的结帐模块,该模块将为最终用户显示一个向导,当用户是经销商时,还将显示另一个多视图。我试图只在用户是最终用户时触发Facebook像素代码。我遇到的问题是NoScript代码,我无法在JavaScript函数中调用它。我也不想把它放在ASCX文件中的脚本标记之后,因为只有在生成发票时才会调用其余的像素代码,并且Facebook pixel Helper浏览器扩展因此给出错误。我试图拆分脚本和NoScript代码。在下面的代码隐藏中,我正在根据我设置的模块设置设置Facebook像素ID。我还为NoScript代码创建了一个设置,即FacebookPixelForEndUserNoScriptImageCode设置

下面的代码是从codebehind调用的前端代码

    function initializeFacebookPixelCodeForEndUser(){
    var custemail = '<%=EndUserEmail%>';
    var custfirstname = '<%=EndUserFirstName%>';
    var custlastname = '<%=EndUserLastName%>';

    !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
        n.queue=[];t=b.createElement(e);t.async=!0;
        t.src=v;s=b.getElementsByTagName(e)[0];
        s.parentNode.insertBefore(t,s)}(window, document,'script',
    'https://connect.facebook.net/en_US/fbevents.js');
    fbq('init', '<%=facebookInitializationCodeID%>', {
        em: custemail,
        fn: custfirstname,
        ln: custlastname,
    });
    fbq('track', 'PageView');
}
function initializeFacebookPixelCodeForEndUser()函数{
var custemail='';
var custfirstname='';
var custlastname='';
!函数(f,b,e,v,n,t,s)
{if(f.fbq)返回;n=f.fbq=function(){n.callMethod?
n、 apply(n,参数):n.queue.push(参数)};
如果(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n、 队列=[];t=b.createElement(e);t.async=!0;
t、 src=v;s=b.getElementsByTagName(e)[0];
s、 parentNode.insertBefore(t,s)}(窗口,文档,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('初始',''{
em:custemail,
fn:custfirstname,
ln:custlastname,
});
fbq(“轨迹”、“页面视图”);
}
这是我在设置中设置的NoScript代码,在调用RegisterStartupScript代码之后立即调用

<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr? 
id=RemovedTheIDForPrivacy&ev=PageView&noscript=1"
/></noscript>

我目前的代码似乎失败了,因为它说fbq是未定义的。我在调用上述代码之后立即调用了Purchase事件,但我认为它失败了,因为代码不在一起

<script>
 fbq('track', 'Purchase', {
   value: 1,
   currency: 'ZAR',
 });
</script>

fbq(“跟踪”、“采购”{
价值:1,
货币:“南非兰特”,
});

关于如何在Javascript/JQuery中调用脚本和NoScript代码,有什么解决方案吗?

通常,当您出现关于fbq未初始化的错误时,这是由于您正在渲染的代码在调用实际Facebook脚本之前触发,因此尚未定义

我会确保对FacebookJS的引用在代码之前(例如,在皮肤的顶部,或者页眉,而不是页脚)


至于no脚本,如果您想从代码背后加载它,您可以使用
控件将其呈现到页面(如果您使用的是WebForms模式)。

我通过使用StringWriter在服务器端编写Facebook像素跟踪代码来解决这个问题

if (!SessionManager.CurrentUserInfo.IsCustomerDealer)
                {     

                    if (Settings["FacebookPixelIDForEndUser"] != null && !string.IsNullOrWhiteSpace(Settings["FacebookPixelIDForEndUser"].ToString()))
                    {
                        EndUserFirstName = SessionManager.CurrentUserInfo.FirstName;
                        EndUserLastName = SessionManager.CurrentUserInfo.LastName;
                        EndUserEmail = SessionManager.CurrentUserInfo.UserName;

                        facebookInitializationCodeID = Settings["FacebookPixelIDForEndUser"].ToString();

                        string FacebookPixelResult = string.Empty;

                        using (var FBPxl = new StringWriter())
                        using (var FBCodescript = new HtmlTextWriter(FBPxl))
                        {
                            FBCodescript.AddAttribute(Attr.Type, "text/javascript");
                            FBCodescript.RenderBeginTag(Tag.Script);
                            //load ecommerce plugin
                            FBCodescript.WriteLine("!function(f,b,e,v,n,t,s){if (f.fbq) return; n = f.fbq = function(){n.callMethod?n.callMethod.apply(n, arguments):n.queue.push(arguments)};");
                            FBCodescript.WriteLine("if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';");
                            FBCodescript.WriteLine("n.queue =[]; t = b.createElement(e); t.async = !0;");
                            FBCodescript.WriteLine("t.src = v; s = b.getElementsByTagName(e)[0];");
                            FBCodescript.WriteLine("s.parentNode.insertBefore(t, s)}");
                            FBCodescript.WriteLine("(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');");
                            FBCodescript.WriteLine($"fbq('init', '{facebookInitializationCodeID}', {{ em: '{EndUserEmail}', fn: '{EndUserFirstName}', ln: '{EndUserLastName}',}});");
                            FBCodescript.WriteLine("fbq('track', 'PageView');");
                            FBCodescript.RenderEndTag();
                            FBCodescript.WriteLine($"<noscript><img height='1' width='1' style='display:none'  src='https://www.facebook.com/tr?id={facebookInitializationCodeID}&ev=PageView&noscript=1'/></noscript>");
                            FacebookPixelResult = FBCodescript.InnerWriter.ToString();
                        }

                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myFacebookPixelInitialization", FacebookPixelResult ,false);

                    }
                }
if(!SessionManager.CurrentUserInfo.IsCustomerDealer)
{     
如果(设置[“FacebookPixelIDForEndUser”]!=null&&!string.IsNullOrWhiteSpace(设置[“FacebookPixelIDForEndUser”].ToString())
{
EndUserFirstName=SessionManager.CurrentUserInfo.FirstName;
EndUserLastName=SessionManager.CurrentUserInfo.LastName;
EndUserEmail=SessionManager.CurrentUserInfo.UserName;
facebookInitializationCodeID=设置[“FacebookPixelIDForEndUser”]。ToString();
string FacebookPixelResult=string.Empty;
使用(var FBPxl=new StringWriter())
使用(var FBCodescript=newhtmltexwriter(FBPxl))
{
AddAttribute(Attr.Type,“text/javascript”);
FBCodescript.RenderBeginTag(Tag.Script);
//加载电子商务插件
FBCodescript.WriteLine(“!function(f,b,e,v,n,t,s){if(f.fbq)返回;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,参数):n.queue.push(参数)};”;
FBCodescript.WriteLine(“如果(!f.fbq)f.fbq=n;n.push=n;n.loaded=!0;n.version='2.0';”;
WriteLine(“n.queue=[];t=b.createElement(e);t.async=!0;”);
WriteLine(“t.src=v;s=b.getElementsByTagName(e)[0];”;
FBCodescript.WriteLine(“s.parentNode.insertBefore(t,s)}”);
FBCodescript.WriteLine(“(窗口,文档,'script',”https://connect.facebook.net/en_US/fbevents.js');");
WriteLine($“fbq('init','{facebookInitializationCodeID}',{{em:'{EndUserEmail}',fn:'{EndUserFirstName}',ln:'{EndUserLastName}',}});”;
WriteLine(“fbq('track','PageView');”;
FBCodescript.renderndtag();
FBCodescript.WriteLine($“”);
FacebookPixelResult=FBCodescript.InnerWriter.ToString();
}
Page.ClientScript.RegisterStartupScript(this.GetType(),“myFacebookPixelInitialization”,FacebookPixelResult,false);
}
}

在何处/何时确定用户是最终用户还是经销商?除非这必须发生在同一页面的客户端,否则您的服务器端逻辑应该处理这个问题,或者输出用于跟踪的JS代码,或者不输出。上面的代码实际上位于确定它是否是最终用户的IF语句中,因此它在服务器端处理。(我没有把它包括在这个问题中)。问题是我想从codebehind调用像素跟踪代码并设置变量。有没有一种编程方式可以构建和执行像素跟踪代码?我不明白你在问什么。要解决的实际问题是什么
if (!SessionManager.CurrentUserInfo.IsCustomerDealer)
                {     

                    if (Settings["FacebookPixelIDForEndUser"] != null && !string.IsNullOrWhiteSpace(Settings["FacebookPixelIDForEndUser"].ToString()))
                    {
                        EndUserFirstName = SessionManager.CurrentUserInfo.FirstName;
                        EndUserLastName = SessionManager.CurrentUserInfo.LastName;
                        EndUserEmail = SessionManager.CurrentUserInfo.UserName;

                        facebookInitializationCodeID = Settings["FacebookPixelIDForEndUser"].ToString();

                        string FacebookPixelResult = string.Empty;

                        using (var FBPxl = new StringWriter())
                        using (var FBCodescript = new HtmlTextWriter(FBPxl))
                        {
                            FBCodescript.AddAttribute(Attr.Type, "text/javascript");
                            FBCodescript.RenderBeginTag(Tag.Script);
                            //load ecommerce plugin
                            FBCodescript.WriteLine("!function(f,b,e,v,n,t,s){if (f.fbq) return; n = f.fbq = function(){n.callMethod?n.callMethod.apply(n, arguments):n.queue.push(arguments)};");
                            FBCodescript.WriteLine("if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0';");
                            FBCodescript.WriteLine("n.queue =[]; t = b.createElement(e); t.async = !0;");
                            FBCodescript.WriteLine("t.src = v; s = b.getElementsByTagName(e)[0];");
                            FBCodescript.WriteLine("s.parentNode.insertBefore(t, s)}");
                            FBCodescript.WriteLine("(window, document,'script','https://connect.facebook.net/en_US/fbevents.js');");
                            FBCodescript.WriteLine($"fbq('init', '{facebookInitializationCodeID}', {{ em: '{EndUserEmail}', fn: '{EndUserFirstName}', ln: '{EndUserLastName}',}});");
                            FBCodescript.WriteLine("fbq('track', 'PageView');");
                            FBCodescript.RenderEndTag();
                            FBCodescript.WriteLine($"<noscript><img height='1' width='1' style='display:none'  src='https://www.facebook.com/tr?id={facebookInitializationCodeID}&ev=PageView&noscript=1'/></noscript>");
                            FacebookPixelResult = FBCodescript.InnerWriter.ToString();
                        }

                        Page.ClientScript.RegisterStartupScript(this.GetType(), "myFacebookPixelInitialization", FacebookPixelResult ,false);

                    }
                }