2013-04-10 105 views
2

我有一個在另一個Web應用程序的iframe中的Web應用程序(兩者都在ASP.NET MVC中完成)。從內部iframe讀取查詢字符串參數

是否有可能從iframe中的應用程序讀取從父Web應用程序使用C#查詢字符串參數?

+0

請在每個涉及的頁面的域(url)上添加信息 - 感覺就像您可能是tryi ng使用錯誤的方法解決相同的原始策略限制... – 2013-04-10 07:00:46

回答

3

您必須將任何想要從父頁面讀取的數據從iframe中的頁面追加到iframe url本身。 例如:

<iframe id="yourid" src="yourpage.aspx?parentdata=whatever_data_to_be_captured"> 
</iframe> 

現在,你必須在自己的iframe頁面解析src值捕獲數據。

這是一個竅門,據我所知似乎沒有直接的方式來訪問iframe的父頁面數據。

+0

我也在考慮同樣的事情,但我想知道是否有另一種方法做到這一點,而無需在iframe src屬性中注入參數。 – Catalin 2013-04-10 07:15:38

+0

不,沒有別的辦法,否則會是一個安全的黑客。 – Sandip 2013-04-10 10:07:48

1

window.parent應該給你一個家長的參考。還有一個window.top它給出了直接的父母,所以如果你的應用程序嵌套不止一次,你應該使用正確的屬性。

從那裏你可以做window.parent.location(或window.top.location),它具有所請求的URL的各種屬性。

要真正閱讀查詢字符串有關於這裏的帖子。你只需要window.parent或window.top更換了window.location:

這裏看到答案:How to get the query string by javascript?這裏更詳細的解答:How can I get query string values in JavaScript?


在控制器:既然你說你需要控制器中的查詢字符串。您仍然需要像上面描述的那樣獲取查詢字符串,然後通過將其傳入內部框架的src調用中,將其傳遞到控制器中。

<iframe src=""></iframe> 

這一切都取決於如何以及何時設置內幀的src屬性。你需要以某種方式改變它。

從你的外框,你可以這樣做:

document.getElementById('myframe').src 
= "http://innerApplication/innerController/actionmethod/?" 
    + window.location.search; 

或者,從框架本身裏面,你會先得到的查詢字符串,然後通過執行window.[top/parent].location = the url + query string

然後做一個重定向/重裝您將讀取查詢字符串,就好像它是內部應用程序的查詢字符串一樣。

+0

我需要從代碼後面執行此操作(在呈現頁面以訪問javascript之前) – Catalin 2013-04-10 06:33:49

+0

代碼背後的意思是控制器嗎?你需要知道控制器中的查詢字符串參數嗎?然後在內部框架中,您需要向控制器發出請求並將查詢字符串作爲參數從javascript傳遞給控制器​​,並且您將在JavaScript中獲取查詢字符串,如我所描述的 – gideon 2013-04-10 06:37:35

+0

是的,我需要在呈現html頁面之前從控制器訪問查詢字符串 – Catalin 2013-04-10 06:38:44

0

您應該使用%26,而不是&發送給IFRAME,例如:

Link : 2.asp?ppp=/Payam.asp?sid=1%26PID=1&sa=12313 <br> 

在代碼:當我requset.queryString("ppp")父它表明:/Payam.asp?sid=1&PID=1

您可以使用此作爲源您的iframe,它有兩個參數:

<IFRAME name="My" src='<%=ppp %>'></IFRAME>