在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误
Posted
技术标签:
【中文标题】在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误【英文标题】:Javascript error when using Messenger Connect client-side library in ASP.NET 【发布时间】:2011-05-11 22:00:28 【问题描述】:我在现有 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._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 行)
只有当我包含来自 js.live.net 的 loader.js
脚本时才会触发错误。
编辑:似乎错误不一定按该顺序触发。刷新页面似乎可以改变这些错误和/或引入其他错误,例如第 1842 行的 ScriptResource.axd?...
中的 Sys.ParameterCountException
。
【问题讨论】:
我也遇到过这个错误,还没有找到解决方案。似乎 Messenger Connect 使用了它自己版本的 AJAX 加载器功能,并且如果您将其用于其他事情(例如异步加载其他所有内容),它与现有版本不兼容。 看看这是否也有帮助,不管最初的罪魁祸首是否有帮助:***.com/questions/19103128/… 【参考方案1】:嘿,我在这里尝试了一些组合,其中一个有效的是:
1) 设置ScriptManager的ScriptMode属性为Release;
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 不再显示任何错误,就我而言,身份验证窗口正在按需要打开。
希望对你有帮助!
编辑
如前所述,下面是我用来避免此问题的整个代码:
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) 似乎没有响应。
【讨论】:
我目前没有参与任何涉及此问题的项目,因此如果有人可以验证此答案,我很乐意将其标记为已回答。 即使未经证实,也将赏金作为最佳答案授予。如果不是太长,会很高兴看到所有代码。 当然,我稍后会发布它,连同一个工作示例。 将其标记为已回答,因为我无法确认答案。 @Tuco 和 @Mark Schultheiss,如果有任何问题,请发表评论。以上是关于在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误的主要内容,如果未能解决你的问题,请参考以下文章
PSEXEC 通过命令提示符成功运行,但在 ASP .Net/C# 中失败
如何在目标c中的asp.net web api方法中使用POST方法?
如何在 Active Directory 中获取用户的组? (c#, asp.net)