我已经实现了一个ajax-polling脚本,每10秒调用服务器控制器中的一个动作。通过回复,我替换了div
:
function getFoo() {
var link = '/Secure/GetFoo';
$.post(link, function (response) {
$('#FooSection').replaceWith(response);
});
setTimeout("getFoo();", 10000);
}
这是通过 https 完成的。在“空闲”一段时间后,IE显示以下消息:
此页面正在访问信息 这不受其控制。这个 存在安全风险。你想要_____吗 继续?
如果用户点击是,该页面将重定向到仅显示响应的div
。如果用户单击否,则不会发生任何事情,但div
容器将不会刷新。
我知道I can suppress this message through browser settings,但这会让我按照上面的对话框选择默认的是。
类似的问题是asked before,但不幸的是没有任何解决方案。我基本上想要在安全连接上进行ajax-polling工作。有什么想法吗?
答案 0 :(得分:15)
您永远不应该在Internet-Zone页面上看到该对话框。默认情况下,此操作在Internet区域中以静默方式自动阻止。
该对话框出现在Intranet区域有两个根本原因:
1>尝试使用XMLHTTPRequest对象执行跨源请求(http://blogs.msdn.com/b/ieinternals/archive/2011/04/22/ie-security-prompt-page-accessing-cross-domain-information -not-下其-control.aspx)
2 - ;尝试将托管HTML的OBJECT标记导航到跨源页面。
您可以通过使用XDomainRequest而不是XMLHTTPRequest来避免大小写#1。 您可以使用IFRAME而不是OBJECT标记来避免大小写#2。
答案 1 :(得分:5)
前几天我遇到了类似的问题,无法找出为什么IE会在AJAX请求后抱怨。
我使用了Firebug的网络控制台,只是逐个完成了请求,直到找到一个http://而不是https://,我建议你这样做 - 这对我们来说几乎是不可能的调试这个没有看到页面,但它可能是没有通过https加载的背景图像。
注意:强> 我确实注意到你说它是IE浏览器,但是像这样的问题可能不是特定于浏览器的,Firefox / Chrome就不会像IE那样对非https元素做出同样的大惊小怪。
答案 2 :(得分:3)
您的代码有两个方面:
为什么使用POST ajax请求?为什么不去GET? 您的请求看起来像一个GET请求(您想获得一些数据),因此GET方法可能是更好的选择。
它与您的问题没有关联,但您不应该将setTimeout与字符串一起使用到eval。你应该给setTimeout一个变量作为第一个参数,这个变量应该是你想要执行的函数。
function getFoo() {
var link = '/Secure/GetFoo';
$.get(link, function (response) {
$('#FooSection').replaceWith(response);
});
window.setTimeout(getFoo, 10000);
}
答案 3 :(得分:3)
答案 4 :(得分:2)
如果在您的代码中甚至有一个元素的src属性以“http”而不是“https”开头,IE将显示该消息。
您确定要获取的数据在其src属性中没有src =“http:// ...”的元素吗?
答案 5 :(得分:2)
我之前看到过这种情况,因为通过ajax调用插入的新内容已链接到无安全图像资源,这是否是您遇到的问题?
答案 6 :(得分:2)
您尝试使用绝对网址吗?
var link ='https://www.yourdomain.com/Secure/GetFoo';