1

在我们的本地化页面上通过 addthis 实现 google plus one 按钮时,从后端(假设数据库)检索了以下数据,面临一个奇怪的问题,加号按钮没有被加载。我们基于 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); 

脚本字符串的值为

<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 按钮不可见。有什么问题?

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

但结果几乎一样。

4

1 回答 1

1

就这样,

在部分回发期间,ASP.NET AJAX 需要知道要下载的依赖脚本列表,以便在所有脚本都下载后宣布“文档已准备好”。在 ASP.NET 3.5 及更低版本中,添加“notifyscriptloaded”是 ASP.NET 知道必须加载依赖脚本资源的唯一方法 - 在部分回发期间。

当您使用 notifyscriptloaded 注册脚本时,ASP.NET 会等待脚本下载并确保仅在下载后才调用文档就绪。这样可以确保脚本的文档准备就绪按预期触发。注意:ASP.NET 4.0 不需要这个(但是我不确定它是如何完成的)。

所以现在的问题就很清楚了。当使用外部 3rd 方 javascript 文件作为参考时,ASP.NET 限制我们只能从静态页面标题(或母版页)引用它。在部分回发期间无法下载脚本 - 除非您可以控制第三方脚本并在其中添加“notifyscriptloaded”。

解决方案,我必须使这个外部第三方脚本成为页眉中的静态引用。这并没有伤害到我,因为无论如何我在多个页面上都有多个 +1 按钮实例。

于 2011-10-10T13:16:16.493 回答