2009-07-23 73 views
3

我試圖執行從我的網站到另一個通過iframe引入的網站的HTTP GET。在IE中通過iframe傳遞參數的問題

在Firefox上,您可以在源代碼中看到iframe src中正確的url以及它的正確參數 - 並且它有效。

在IE瀏覽器,你可以在正確的URL在IFRAME SRC連同它是正確的parameters--和它不起作用源看到...

有一些關於IE那並不是」讓你通過查詢字符串中的iframe傳遞參數?

我試過在IE中刷新iframe,我試過在IE中刷新我的頁面& iframe,我試過複製url並將它重新粘貼到iframe src中(迫使它刷新爲如果我剛剛將它輸入到該iframe窗口的地址欄中)。仍然沒有運氣!

任何人都知道爲什麼會發生這種情況,或者有任何建議來嘗試解決這個問題?

編輯︰我不能給這個鏈接,因爲該網站需要密碼和登錄憑據我們的網站和我們的供應商的網站。儘管我可以在我們的網站上創建一個測試帳戶,但它對測試過程沒有任何好處,因爲我無法爲供應商網站做同樣的事情。至於代碼,所有它所做的是創建SRC從頁面加載後端代碼和設定從後端src屬性...

//Backend code to set src 
mainIframe.Attributes["src"] = srcWeJustCreated; 

//Front end iframe code 
<iframe id="mainIframe" runat="server" /> 

編輯:問題從未解決。答案自動接受,因爲賞金過期。當我們的網站更接近上線時,我會用更多的信息和鏈接指向這個問題。


謝謝
馬特

+0

這裏是一個愚蠢的問題:當您嘗試通過在地址欄(即沒有IFRAME)導航到該頁面與查詢字符串在IE中會發生什麼? – Hafthor 2009-07-26 05:43:10

+0

它的工作原理,它只是與iframe,它不工作。 – Matt 2009-07-27 00:31:19

+1

有沒有指向我們可以用來調查的頁面的鏈接? – 2009-07-27 15:16:28

回答

8

通過IE查詢參數的默認安全設置被阻擋在I幀。在Internet選項下的安全選項卡上,將安全級別設置爲低。如果這解決了你的問題,那麼你知道這是你的問題。如果該網站是面向外部客戶的,那麼期望他們拒絕他們的安全設置可能是不合理的,因此您可能必須找到解決辦法。

-1

嘗試使用間接方法。創建一個FORM。將其操作參數設置爲您要導航的基礎網址。將其方法設置爲POST。將其目標設置爲您的iframe,然後創建必要的參數作爲隱藏輸入。最後,提交表格。它應該工作,因爲它與POST一起工作。

0

根據Mike的回答,最簡單的解決方案就是使用「參數隱藏」將所有GET參數轉換爲單個URL。

最具擴展性的方法是,URL中的每個'文件夾'由參數,逗號和值組成。例如,你會在你的應用程序中使用這些網址:

http://example.com/app/param,value/otherparam,othervalue http://example.com/app/param,value/thirdparam,value3

這將是這些等價的:

http://example.com/app?param=value&otherparam=othervalue http://example.com/app?param=value&thirdparam=value3

這是公關etty很容易在Apache上使用.htaccess,但它看起來像你使用IIS,所以我會留給你去研究確切的實現。

編輯:剛回來,意識到它不可能實現上述不同的領域,如果你不擁有它:P但是,你可以這樣做服務器端:

  • 在您自己的服務器上將上述參數隱藏設置爲特殊腳本(如果IE不介意來自同一服務器的GET,則可能不需要)。
  • 在Javascript中,從各個參數中構建靜態URL。
  • 讓服務器上的腳本使用參數並讀取外部URL並將其輸出,即獲取服務器端的內容。 This question可能會幫助你。

所以,你的iframe網址是:

http://yoursite.com/app/param,value/otherparam,othervalue

該網頁會讀取和顯示的網址:

http://externalsite.com/app?param=value&otherparam=othervalue

1

假設您的網站是www.acme.com並且iframe源位於www.myvendor.com

IIRC,最域級別的安全設置不關心的主機名,所以添加DNS CNAME到你的區域文件myvendor.acme.com,指着回www.myvendor.com。然後,在您的IFRAME中,使用您的主機名別名設置源。

另一種解決方案可能是讓您的Javascript將src設置爲重定向器腳本在您自己的服務器上(並因此在您的域中)。然後,您的腳本會將IFRAME重定向到具有相同參數的「正確」URL。

0

BYK說什麼。我認爲發生了什麼是你正在得到一個URL太大,無法處理。我注意到你正在嘗試發送名爲src的變量,這個變量可能很長,超過4k。我之前遇到過這個問題,這是我的代碼。注意關於IE的評論。另外請注意,它會導致Firefox出現問題,然後在另一條評論中解決。

var autoSaveFrame = window.frames['autosave']; 
// try to create a temp form object to submit via post, as sending the browser to a very very long URL causes problems for the server and in IE with GET requests. 
var host = document.location.host; 
var protocol = document.location.protocol; 
// Create a form 
var f = autoSaveFrame.document.createElement("form"); 
// Add it to the document body 
autoSaveFrame.document.body.appendChild(f); 
// Add action and method attributes 
f.action = protocol + '//' + host + "/autosave.php"; // firefox requires a COMPLETE url for some reason! Less a cryptic error results! 
f.method = "POST" 
var postInput = autoSaveFrame.document.createElement('input'); 
postInput.type = 'text' 
postInput.name = 'post';  
postInput.value = post; 
f.appendChild(postInput); 
//alert(f.elements['post'].value.length); 
// Call the form's submit method 
f.submit();