asp.net - 如何使用 javascript 抑制 IE7 ActiveX 消息?

标签 asp.net javascript jquery ajax activex

我正在尝试决定是使用自定义 ASP.Net Ajax Extender 还是 jQuery 来执行简单的 Web 服务调用。 Web 服务方法接受客户 ID 并返回客户名称。我倾向于 jQuery,因为它很简单。唯一的问题是,由于我公司的 IE7 组策略设置,jQuery 第一次调用 Web 服务时会提示用户以下消息:

A script is accessing some software (an ActiveX control) on this page which has been marked safe for scripting. Do you want to allow this?

Extender 不会导致显示此消息。我假设 ASP.Net Ajax 库有一些抑制它的 javascript 巫术。所以我的问题是,如何使用 javascript 抑制此消息?

这是我的 aspx 标记:

<h1>
    Finder Test</h1>
<div>
    <h2>
        Extender</h2>
    Customer ID:
    <asp:TextBox ID="txtCustomerId" runat="server" MaxLength="9" Width="4em" />
    <belCommon:FinderExtender ID="extCustomerId" runat="server" TargetControlID="txtCustomerId"
        ResultLabelID="lblResult" ServicePath="~/Customer.asmx" ServiceMethod="Name" />
    <asp:Label ID="lblResult" runat="server" />
</div>
<div>
    <h2>
        jQuery</h2>
    Customer ID:
    <input id="txtCustomerId2" type="text" maxlength="9" style="width: 4em;" value="0000" />
    <span id="txtCustomerName2"></span>

    <script type="text/javascript">
        $(document).ready(function()
        {
            $("#txtCustomerId2").change(
            function()
            {
                updateCustomerDescription(this.value, "txtCustomerName2");
            }).change();
        });

        function updateCustomerDescription(id, descriptionControlId)
        {
            // if we don't have a value, then don't bother calling the web service
            if (id == null || id.length == 0)
            {
                $("#" + descriptionControlId).text("");
                return;
            }

            jsonAjax("customer.asmx/Name", "{'id':'" + id + "'}", true,
                function(result)
                {
                    var name = result.d == null ? "" : result.d;
                    $("#" + descriptionControlId).text(name);
                }, null);
        }

        function jsonAjax(url, data, async, onSuccess, onFailed)
        {
            $.ajax({
                async: async,
                type: "POST",
                url: url,
                data: data,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: onSuccess,
                error: onFailed
            });
        }
    </script>
</div>

[更新]

我假设消息中引用的 ActiveX 控件是 XMLHttpRequest。我还假设 jQuery 和 ASP.Net Ajax 的内部结构都将它用于 IE7。

[更新]

差异似乎在于 ASP.Net Ajax 和 jQuery 构造 XMLHttpRequest 实例的方式。

ASP.Net Ajax(感谢@Jesse Dearing):

 window.XMLHttpRequest = function window$XMLHttpRequest() {
 var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ];
 for (var i = 0, l = progIDs.length; i < l; i++) {
  try {
    return new ActiveXObject(progIDs[i]);
  }
  catch (ex) { }
  }
     return null;
  }
}

jQuery 1.3.2:

// Create the request object; Microsoft failed to properly
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
// This function can be overriden by calling jQuery.ajaxSetup
xhr:function(){
    return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
}

最佳答案

这听起来不对。如果有适当的安全策略,你不应该能够用 javascript 覆盖它。

我会仔细检查这两个页面,看看它们是否真的访问同一个 ActiveX 控件。我假设这些页面来自同一主机(因此不存在不同 WinInet 信任区域的问题)。

关于asp.net - 如何使用 javascript 抑制 IE7 ActiveX 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/591439/

相关文章:

python - IIS 上的多个 Python Flask 站点

c# - 使用 Microsoft.Office.Interop.Excel 导出时我是否正确关闭了 excel 文件

javascript - 更新给定索引的数组值(mongoose,mongodb)

javascript - jquery页面加载获取另一个页面内容,鼠标悬停如何加载一次

javascript - 饼图图例未显示 - 未捕获类型错误 : Cannot set property 'innerHTML' of null

php - 如何在 asp.net 页面中包含外部 html 文件

javascript - 如何在 asp :Radiobutton? 中调用 Javascript 函数

javascript - 优化代码仅定义一次变量,代码仅在变量处于更改功能时才起作用,而对于更改之外的代码我重新定义?

javascript - 有没有办法在 WebStorm 中启用对可选链接运算符的支持

javascript - 更改 JQuery DatePicker 的标题