0

我需要创建一个简单的静态 Web 部件 - 唯一的动态部件是当前用户登录名(需要包含在链接的 URL 参数中)。

我宁愿只使用内容编辑器 Web 部件,而不是我需要部署的自定义 Web 部件。事实上,我已经使用 JavaScript 和 ActiveX 做到了这一点(WScript.Shell- 下面的完整代码)

有没有更好、更本土的方式来做到这一点?我不喜欢 ActiveX 方法的地方在于它需要对 IE 进行更自由的配置,即使我在安全设置中启用了与 ActiveX 相关的所有内容,仍然需要单击提示。跨浏览器支持不是主要问题,它是 Intranet - 但也将是一个不错的附加功能。

我能想到的一种方法是使用 jQuery(或只是 JavaScript)从右上角刮取用户名,但有什么更干净的吗?或者也许有人已经完成了抓取并可以分享代码以节省我一些时间;-)

这是我目前的解决方案:

<script language="javascript">
    function GetUserName()
    {
        var wshell = new ActiveXObject("WScript.Shell");
        var username = wshell.ExpandEnvironmentStrings("%USERNAME%");

        var link = document.getElementById('linkId');
        link.href = link.href + username.toUpperCase();
    }
</script>
<P align=center>
    <a id="linkId" onclick="GetUserName();" href="<my_target_URL>?UserID=">open username-based URL</a>
</P>
4

2 回答 2

2

在内容编辑器 Web 部件中包含此Web 部件令牌:

_LogonUser_

它输出与 Request.ServerVariables("LOGON_USER") 相同的值

在包含隐藏跨度和普通旧 document.getElementById 以获取内部文本之前,我已经完成了此操作。

于 2013-03-01T12:35:56.093 回答
0

我的结论是没有更好的方法来做到这一点(这也很容易)。

我检查了页面的来源,用户名不在那里,所以不能被 JavaScript/jQuery 抓取。浏览器似乎没有随请求一起发送它(就像它使用您的本地 IP 和其他与客户端相关的信息一样),因此也无法从标头中获取。我能想到的唯一另一种方法是从客户端调用 Web 服务,这对我的场景来说太过分了。

于 2013-03-01T12:15:10.247 回答