2010-11-18 20 views
37

Mam problem z zaimplementowaniem nowej funkcji Messenger Connect w istniejącej witrynie Sitefinity w celu umożliwienia logowania klienta przy użyciu identyfikatorów Live ID.Błąd JavaScript podczas korzystania z biblioteki klienta Connect po stronie klienta w ASP.NET

Mianowicie, gdy używam następujący kod do wdrożenia funkcjonalność po stronie klienta:

<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> 

... mam trzy błędy w Firebug, że nie mogę całkiem poprawnie identyfikują:

Sys.ArgumentTypeException: Obiekt typu "Sys._Application" nie może być przekonwertowany na typ "Sys.IDisposable". Nazwa Parametr: obiekt

Sys.Application._doInitialize nie jest funkcja

(w (w ScriptResource.axd d = .... linia 4993?) MicrosoftAjaxBase.js wiersz 1)

Sys.InvalidOperationException: The sc ript "MicrosoftAjaxGlobalization.js" został przywołany wiele razy. Jeśli jednoznacznie odwołuje się do skryptów Microsoft AJAX , należy ustawić właściwość MicrosoftAjaxMode menedżera ScriptManager na Jawny.

(w ScriptResource.axd? D = .... linia 984)

Błędy są uruchamiane tylko wtedy, gdy zawierają loader.js skrypt z js.live.net.

EDIT: Wydaje się, że błędy nie są koniecznie wywołane w tej kolejności. Odświeżenie strony wydaje się przetasować te błędy i/lub wprowadzić inne, na przykład Sys.ParameterCountException w w linii 1842, na przykład.

+0

Miałem również ten błąd i nie miałem żadnego szczęścia, aby znaleźć rozwiązanie. Wygląda na to, że program Messenger Connect korzysta z własnej wersji funkcji modułu ładującego AJAX i nie odtwarza się dobrze z istniejącą wersją, jeśli używa się jej do innych rzeczy (np. Do asynchronizowania wszystkich innych rzeczy). –

+0

Sprawdź, czy to pomaga również niezależnie od źródła pochodzenia, aby sprawdzić, czy to pomaga: http://stackoverflow.com/questions/19103128/javascript-runtime-error-for-microsoft-ajax-scripts – atconway

Odpowiedz

3

Hej, próbowałem niektóre kombinacje tutaj, i ten, który pracował był:

1) Ustaw właściwość ScriptMode z ScriptManager do wydaniu;

2) Załaduj bibliotekę MSN w przypadku kodzie Page_Load, przy użyciu klasy clientScript:

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

Firebug nie wykazuje żadnego błędu już, w moim przypadku, otwierając okno uwierzytelniania jest to pożądane.

Mam nadzieję, że pomoże!

EDIT

Jak powiedziano wcześniej, tutaj następuje cały kod używam, aby uniknąć tego problemu:

Domyślne.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> 

Aby zobaczyć go w ruchu, można uzyskać dostęp http://labs.asteria.com.br/wlm. Wygląda na to, że adres URL zgody (https://consent.live.com/AccessToken.aspx) nie odpowiada obecnie.

+0

Nie pracuję obecnie w przypadku każdego projektu z tym związanego, więc jeśli ktoś może zweryfikować tę odpowiedź, z radością oznaczy to jako odpowiedź. –

+0

Być może Bill Forney będzie mógł potwierdzić ... –

+0

Przyznanie nagrody za najlepszą odpowiedź, nawet jeśli jest niepotwierdzone. Byłoby miło zobaczyć cały kod, jeśli nie za długo. –