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