Ошибка JavaScript при использовании клиентской библиотеки Messenger Connect в ASP.NET
У меня проблема с реализацией новой функциональности Messenger Connect на существующем сайте Sitefinity, чтобы разрешить входы клиентов с использованием 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._Application' не может быть преобразован в тип 'Sys.IDisposable'. Имя параметра: объект
(в ScriptResource.axd?d=.... строка 4993)
Sys.Application._doInitialize не является функцией
(в строке MicrosoftAjaxBase.js 1)
Sys.InvalidOperationException: на скрипт "MicrosoftAjaxGlobalization.js" ссылались несколько раз. При явной ссылке на сценарии Microsoft AJAX установите для свойства MicrosoftAjaxMode объекта ScriptManager значение "Явное".
(в ScriptResource.axd?d=.... строка 984)
Ошибки возникают только тогда, когда я включаю loader.js
скрипт от js.live.net.
РЕДАКТИРОВАТЬ: Кажется, ошибки не обязательно инициируются в этом порядке. Обновление страницы, кажется, перемешивает эти ошибки и / или вводит другие, такие как Sys.ParameterCountException
в ScriptResource.axd?...
по линии 1842, например.
1 ответ
Эй, я попробовал несколько комбинаций здесь, и одна из них работала так:
1) Установите для свойства ScriptMode ScriptManager значение Release;
2) Загрузите библиотеку MSN в событие CodeBehind Page_Load, используя класс ClientScript:
protected void Page_Load(object sender, EventArgs e)
{
ClientScript.RegisterClientScriptInclude(this.GetType(), "live", "http://js.live.net/4.0/loader.js");
}
Firebug больше не отображает никаких ошибок, и в моем случае окно аутентификации открывается по желанию.
Надеюсь, поможет!
РЕДАКТИРОВАТЬ
Как уже говорилось, ниже следует весь код, который я использую, чтобы избежать этой проблемы:
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) в настоящее время не отвечает.