javascript - 如何在 DNN 代码隐藏中加载 Facebook Pixel NoScript 代码?

标签 javascript dotnetnuke noscript facebook-pixel

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

enter image description here

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

      facebookInitializationCodeID = Settings["FacebookPixelIDForEndUser"].ToString();
      ScriptManager.RegisterStartupScript(Page, this.GetType(), "attacheEvents", "javascript:initializeFacebookPixelCodeForEndUser();", true);

      string FacebookPixelNoScriptCode = Settings["FacebookPixelForEndUserNoScriptImageCode"].ToString();
      Page.ClientScript.RegisterStartupScript(this.GetType(), "FacebookPixelForEndUserNoScriptImageCode", FacebookPixelNoScriptCode, false);
}

下面的代码是从代码隐藏调用的前端代码。

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

这是我在设置中设置的 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 未定义。我在调用上述代码后立即调用购买事件,但我认为它失败了,因为代码不在一起。

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

是否有关于如何在 Javascript/JQuery 中调用 Script 和 NoScript 代码的解决方案?

最佳答案

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

我会确保对 Facebook JS 的引用位于您的代码之前(例如在皮肤顶部或页眉,而不是页脚。)

对于无脚本,如果你想从后面的代码加载它,你可以使用 <asp:literal>如果您使用 WebForms 模式,则控件将其呈现到页面。

关于javascript - 如何在 DNN 代码隐藏中加载 Facebook Pixel NoScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49654538/

相关文章:

php - 如果条件为真,我如何写入 textarea 值

DotNetNuke 允许打印/最小化和最大化

http-status-code-404 - 7.1 404 错误页面未显示

javascript - 如何在 <noscript> 标记中使用 &lt;style&gt; 元素?

firefox - 在 NoScript 上全局允许 Cloudfront

javascript - 如何使用生成器使 Promise 同步执行

javascript - 将图像上传到解析帐户

javascript - 防止从脚本加载图像

javascript - chrome contextMenu - 获取选项卡中的窗口对象

dotnetnuke - 是否有可能在 DNN 的路线映射器中添加多条路线