gpt4 book ai didi

c# - 如何检测客户端是否可以访问 iFrame 中的网站?

转载 作者:行者123 更新时间:2023-11-28 02:38:05 25 4
gpt4 key购买 nike

我目前有一个网站,在某些地方使用 iFrame 从我们的 Intranet 加载页面(这是不可避免的)。我想要做的是能够检测客户端是否能够从当前位置访问 Intranet 页面。我有以下代码,但显然它只检查服务器是否可以连接内联网(剧透警报:完全可以)。

public bool IsAvailable()
{
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create("http://localintranetsite/");
httpReq.AllowAutoRedirect = false;

try
{
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode == HttpStatusCode.NotFound)
return false;
else
return true;
}
catch
{
return false;
}
}

我希望能够做到这一点,而不必依赖检测网站用户的 IP 地址,当然如果可能的话。

我的另一个选择是在无法联系 Intranet 站点时创建自定义 404 页面,但我不确定我是否可以做到这一点(或者如果我可以的话我会如何做)。

如果有什么区别的话,加载 iFrame 的代码位于从 javascript 调用的 Web 服务中,因此虽然我的 Web 服务中的 asp.net 解决方案是理想的,但 javascript 函数也可以工作。

我当前的解决方案(没有帮助)尝试检查 Intranet 站点是否可以访问,但它只能检查 Web 服务器是否可以访问它,而不能检查客户端是否可以访问。

对于那些好奇的人,这是 javascript(通过 jQuery)方式(它不起作用,因为它是跨域的):

    $.ajax({
type: 'HEAD',
url: 'http://intranetsite/',
success: function () {
local = true;
},
error: function () {
local = false;
}
})

最佳答案

由于您的 Intranet URL 与主页位于不同的主机域中,因此页面上运行的 JavaScript 无法直接确定 iframe 内发生的情况。如果 iframe 无法联系 Intranet 站点,由于主机域的差异,外部页面将看不到错误状态。

但是,即使在跨域情况下,iframe 也可以通过多种方式向主机页公开数据。例如,可以从 iframe 的内部或外部对 iframe 的宽度或高度进行更改,并且可以从两侧看到。

一种解决方案可能是向从 Intranet 站点加载到 iframe 的 html 页面添加一些 JavaScript 代码,以将 iframe 的宽度或高度设置为特殊值。如果 iframe 在主页上不可见,则可以将宽度和高度设置为所需的任何整数值。如果 iframe 确实需要可见,您可以通过将宽度或高度设置为偶数或奇数值来跨边界传递 bool 信息。

例如,让 Intranet 网页通过在页面加载时将其增加到奇数值来修改其高度。

让主机页面中的 JavaScript 将 iframe 的初始高度设置为偶数,然后将 Intranet URL 分配给 iframe.src 属性。一段时间后让主机页 JavaScript 检查 iframe 高度。如果 iframe 高度仍然是之前的高度,则 URL 尚未加载。如果已经过去很长时间,则 URL 尚未加载,可能是因为客户端无法访问 Intranet 站点。

如果主机页面看到iframe高度变成了奇数,那么就知道内网页面加载成功。

此方法不会提供明确的失败信号,但它应该提供明确的成功信号。

如果您需要支持的浏览器足够现代,您可能会考虑使用 HTML5 window.postMessage 在同一浏览器中跨域边界的 DOM 元素之间进行通信。 https://developer.mozilla.org/en-US/docs/DOM/window.postMessage

关于c# - 如何检测客户端是否可以访问 iFrame 中的网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com