谷歌加一个按钮是不可见的,而部分回发asp.net加载它

本文关键字:加载 net asp 一个 按钮 谷歌 | 更新日期: 2023-09-27 18:10:22

在我们的一个本地化页面上通过addthis实现google + one按钮,其中以下数据是从后端(假设数据库)检索的,面临一个奇怪的问题,plus按钮没有加载。我们基于ajax的部分回发

以下html仅在部分回发期间添加到页面

<div class="addthis_toolbox addthis_default_style" style="float:right;">
   <a class="addthis_button_google_plusone" g:plusone:size="small"></a>
</div>

同时,脚本通过

包含
ScriptManager.RegisterStartupScript(Page, typeof(string),
                                    "RegisterHTMLScript" + scriptID,
                                     scriptstring,
                                     false); 

scriptstring的值为

<script type="text/javascript">
     var addthis_config = {"data_track_clickback":true};
     if (window.addthis) {
        addthis.toolbox('.addthis_toolbox'); 
        addthis.init(); 
     }
     else {
       $.getScript('http://s7.addthis.com/js/250/addthis_widget.js#username=XXXXX&domready=1'); 
       $.getScript('https://apis.google.com/js/plusone.js'); 
     }
 </script>

我无法看到任何客户端错误,但同时+1按钮不可见。会出什么问题呢?

而不是RegisterStartupScript,我尝试了1. 以编程方式将ScriptReference添加到当前脚本管理器中。2.

使用RegisterClientScriptInclude方法。

但结果几乎相同。

谷歌加一个按钮是不可见的,而部分回发asp.net加载它

开始了,

在部分回发期间,ASP。. NET AJAX需要知道要下载的依赖脚本列表,以便在下载完所有脚本后宣布"DOCUMENT IS READY"。在ASP。添加"notifyscriptloaded"是ASP. NET 3.5及以下版本的唯一方法。. NET知道一个依赖的脚本资源必须被加载-在部分回发期间。

当你用notifyscriptloaded注册一个脚本时,. NET等待直到脚本被下载,并确保只有在下载后才调用document ready。这样可以确保脚本的文档准备按预期启动。注意:ASP。. NET 4.0不需要这个(但是我不确定它是如何完成的)。

所以现在的问题很清楚了。当使用外部第三方javascript文件作为参考时,ASP。NET限制我们只能从静态页头(或母版页)引用它。在部分回发期间没有办法下载脚本-除非您对第三方脚本进行控制并在其中添加"notifyscriptloaded"。

解决方案,我不得不使这个外部第三方脚本在页头中的静态引用。这并没有伤害到我,因为我在多个页面上都有几个+1按钮的实例。