在ASP.NET中使用Messenger Connect客户端库时出现Javascript错误
我在实施现有Sitefinity网站内部的新的Messenger Connectfunction时出现问题,无法使用实时IDlogin客户端。
也就是说,当我使用下面的代码来实现客户端function时:
<head runat="server"> <script type="text/javascript" src="http://js.live.net/4.1/loader.js"></script> </head> <body> <form runat="server" id="form1"> <asp:ScriptManager ID="ScriptManager1" runat="server"/> <wl:app client-id="<%= ConfigurationManager.AppSettings["wl_wrap_client_id"] %>" scope="WL_Profiles.View" callback-url="<%= ConfigurationManager.AppSettings["wl_wrap_client_callback"] %>?wl_session_id=<%=SessionId %>" channel-url="/channel.htm"> </wl:app>
…我在Firebug中发现了三个错误,我无法正确识别:
Sys.ArgumentTypeException:types'Sys._Application'的对象不能转换为'Sys.IDisposable'types。 参数名称:对象
(在ScriptResource.axd?d = ….行4993)
Sys.Application._doInitialize不是一个函数
(在MicrosoftAjaxBase.js第1行)
Sys.InvalidOperationException:脚本“MicrosoftAjaxGlobalization.js”已被多次引用。 如果显式引用Microsoft AJAX脚本,请将ScriptManager的MicrosoftAjaxMode属性设置为Explicit。
(在ScriptResource.axd?d = ….行984)
只有当我包含来自js.live.net的loader.js
脚本时才会触发错误。
编辑 :似乎错误不一定以此顺序触发。 例如,刷新页面似乎会改变这些错误和/或引入其他错误,例如,在ScriptResource.axd?...
的Sys.ParameterCountException
。
嘿,我在这里尝试了一些组合,而那个工作的是:
1)将ScriptManager的ScriptMode属性设置为Release ;
2)使用ClientScript类在CodeBehind Page_Load事件中加载MSN库:
protected void Page_Load(object sender, EventArgs e) { ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js"); }
Firebug不再显示任何错误,在我的情况下,authentication窗口是根据需要打开的。
希望能帮助到你!
编辑
如前所述,下面是我用来避免这个问题的整个代码:
Default.aspx的
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wl="http://apis.live.net/js/2010"> <head> <title>SignIn Example</title> <script type="text/javascript"> function appLoaded(appLoadedEventArgs) { } function signInCallback(signInCompletedEventArgs) { if (signInCompletedEventArgs.get_resultCode() === Microsoft.Live.AsyncResultCode.success) { alert('Sign-in successful.'); } else { alert('Sign-in failed.'); } } </script> </head> <body> <form runat="server" id="form1"> <asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release"></asp:ScriptManager> <wl:app channel-url="http://labs.asteria.com.br/wlm/Channel.html" callback-url="http://labs.asteria.com.br/wlm/Callback.aspx?wl_session_id=<%= Session.SessionID %>" client-id="0000000044052209" scope="WL_Profiles.View" onload="{{appLoaded}}"> </wl:app> <wl:signin id="signInControl" signedintext="Signed in. Click to sign out." signedouttext="Click to sign in." onsignin="{{signInCallback}}" /> </form> </body> </html>
Default.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js"); } }
Web.config文件
<?xml version="1.0"?> <configuration> <appSettings> <add key="wl_wrap_client_secret" value="[YOUR SECRET KEY]"/> <add key="wl_wrap_client_id" value="0000000044052209"/> <add key="wl_wrap_client_callback" value="http://labs.asteria.com.br/wlm/Callback.aspx"/> </appSettings> <connectionStrings/> <system.web> <customErrors mode="Off"/> <compilation debug="true" targetFramework="4.0"></compilation> <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> </system.web> </configuration>
要看它运行,你可以访问http://labs.asteria.com.br/wlm 。 同意url(https://consent.live.com/AccessToken.aspx)似乎目前没有回应。;