代码之家  ›  专栏  ›  技术社区  ›  Klemen Slavič

在ASP.NET中使用messenger connect客户端库时出现javascript错误

  •  37
  • Klemen Slavič  · 技术社区  · 14 年前

    在现有SiteFinity站点内实现新的Messenger Connect功能时遇到问题,无法使用Live ID启用客户端登录。

    也就是说,当我使用以下代码来实现客户端功能时:

    <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:“sys.\u application”类型的对象不能是 已转换为类型“sys.idisposable”。 参数名称:对象

    (在scriptResource.axd中?D=…第4993行)

    sys.application.doInitialize不是 功能

    (MicrosoftAjaxBase.js第1行中)

    sys.invalidOperationException:无效操作异常: 脚本“microsoftajaxglobalization.js” 已被多次引用。如果 引用Microsoft Ajax脚本 显式设置MicrosoftAjaxmode 脚本管理器的属性 明确的。

    (在scriptResource.axd中?D=…线路984)

    只有当我包含 loader.js 来自js.live.net的脚本。

    编辑 :似乎错误不一定按此顺序触发。刷新页面似乎会改变这些错误和/或引入其他错误,例如 Sys.ParameterCountException 在里面 ScriptResource.axd?... 例如,在第1842行。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Tuco    14 年前

    嘿,我在这里尝试了一些组合,有效的是:

    1)将scriptmanager的scriptmode属性设置为 释放 ;

    2)在codebehind page_load事件中加载msn库,使用clientscript类:

    protected void Page_Load(object sender, EventArgs e)
    {
        ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js");
    }
    

    Firebug不再显示任何错误,在我的例子中,身份验证窗口将根据需要打开。

    希望有帮助!

    编辑

    如前所述,下面是我用来避免这个问题的整个代码:

    默认.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>
    

    默认.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)没有响应。

    推荐文章