我目前有一個網站,在某些地方使用iFrame從我們的Intranet加載頁面(這是不可避免的)。我想要做的是能夠檢測客戶端是否能夠從其當前位置訪問Intranet頁面。我有以下代碼,但顯然它只檢查服務器是否可以聯繫內部網(擾流警報:它完全可以)。如何檢測客戶端是否可以訪問iFrame中的網站?
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;
}
})
+1。請注意,postMessage在IE8及更高版本中可用,因此除非必須支持IE6/7,否則它是在不同域上的幀之間進行通信的最佳方法。 –
感謝您的反饋 - 不幸的是,我可能必須這樣做,而無需訪問其他Intranet網站。根據我的理解,我們託管它,其他人運行它。 – Maverick