2014-01-21 27 views
3

假設我有一個ASP.NET頁面供其他站點在其內呈現。進一步假設我的頁面包含一些服務器端<asp:LinkButton>控件,它們被渲染爲<a href="javascript:__doPostBack(...)">鏈接。asp:LinkBut​​ton不能在iframe中工作

我會很高興if _ doPostBack()將在iframe中執行,但它不會 - 相反,我會在控制檯中得到「 _doPostBack未定義」錯誤。我認爲這是因爲它試圖在外部頁面上執行它,因爲它是一個href =「javascript:...」鏈接,而不是普通的DOM事件。

如何在不改變LinkBut​​ton的情況下克服這一點?有沒有更好的方法來運行我點擊按鈕所需的服務器端代碼?

編輯:我添加了一個<a href="javascript:alert(document.title)">test</a> 並點擊它,我得到了我的外部頁面的標題,而不是我的頁面在iframe中的標題。

+2

您的回傳將不會僅在iframe本身內與父窗口進行交互。如果你想從iframe傳遞信息給父母,你可能需要潛入javascript來實現這一點。 – Caimen

+2

頁面是否位於同一個域中?如果是這樣,應該可以用一個小小的Javascript。如果沒有,那麼使用JS絕對沒有辦法做到這一點,因爲它違反了[相同的原產地政策](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript) – Basic

+0

頁面沒有在同一個域上,但我很樂意在iframe中執行__doPostBack()。相反,我在控制檯中收到「__doPostBack未定義」錯誤。 (我已經確認__doPostBack是在iframe中定義的,但不在外部頁面上)。我認爲這是因爲它試圖在外部頁面上執行它,因爲它是一個href =「javascript:...」鏈接,並且不是一個普通的DOM事件。我明白這是正確的嗎? –

回答

1

我可能沒有得到正確的問題......但iframe中的鏈接按鈕只能在iframe上下文中正常工作。因此,iframe .aspx的代碼隱藏中的任何內容都可以像常規一樣工作。

現在,如果你想在iframe中的link_button與父頁面進行交互, 你正在做的是一個跨域的方案。我懷疑你有什麼辦法可以做到這一點,這是出於安全原因。我正在尋找像asked here那樣的東西。

如果您擁有這兩個網站,那麼您可能需要檢查WebService是否有用。

+0

如果_doPostBack會在iframe內執行,我會很高興,但它不會。相反,我在控制檯中收到「__doPostBack未定義」錯誤。我認爲這是因爲它試圖在外部頁面上執行它,因爲它是一個href =「javascript:...」鏈接,而不是普通的DOM事件。我明白這是正確的嗎? (我不擁有外部網站) –

+0

啊......你遇到IE10和IE11的錯誤嗎? http://stackoverflow.com/questions/18244223/webform-dopostbackwithoptions-is-undefined-in-ie11-preview – gbs

+0

不,在Chrom和Firefox中測試「,但iframe中的鏈接按鈕只能在iframe上下文中正常工作」 - 我不認爲是這樣,因爲它是一個鏈接,它只在最頂層的頁面中執行。 –

1

我很想好好嘗試一下,所以我創建了一個測試應用程序,我很容易在IFrame中獲得一個回傳。

現在我們來澄清一下iframe中發生回發的情況,甚至可以在幀邊界內看到效果(除非使用某些客戶端腳本進行其他編程)。現在,對於您的問題,在正常情況下,您不可能調用父母__dopostback事件(但您可能希望看到this link可能會發生在您的父母頁面上)。

有時,作爲安全措施,javascript在個別IFrame上被禁用(該功能隨時可用於HTML5)。很有可能你正在處理類似的情況。在這種情況下,您無法控制功能,除非您退回到簡單的HTML表單並將其發佈到不同的ASP.net頁面。

根據我們下面的討論,我建議您在頁面中使用簡單的HTML超鏈接,除非您可以更改父頁面的代碼。如果回發是可取的,那麼你可以利用跨頁面發佈(正如我已經提到),並從該頁面重定向回你當前的子頁面。

其中一個代碼應該爲你工作:

<a href="#" onclick="YourFormName.submit()">Link Text</a> 

OR

<a href="#" onclick="document.getElementById("myForm").submit();">Link Text</a> 

OR

<a href="#" onclick="document.getElementById("Iframe Name").contentWindow.document.getElementById("YourFormName".submit)">Link Text</a> 

OR

<a href="#" onclick="document.getElementById("Iframe Name").contentDocument.document.getElementById("YourFormName".submit)">Link Text</a> 

如果上面的代碼都不適合你,那麼你應該考慮提交一個提交按鈕,而不是超鏈接。

希望這會有所幫助。

0

也好奇,我試圖複製你的問題,但後置工作正常內iframe。這聽起來可能很愚蠢,但是你能否確認該頁面在iframe外部工作?

其他建議:

  1. 嘗試不同的瀏覽器
  2. 禁用瀏覽器擴展

嘗試建立在你的本地計算機基本的HTML頁面iframe來你的網站,看看它的工作原理是辦法。這可以告訴你,如果父頁是罪魁禍首。

<!DOCTYPE html> 

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
<title></title> 
</head> 
<body style="background: #ccc"> 
    <h1>My HTML Page</h1> 
    <iframe src="http://MyWebsiteUrl" width="400" height="400" /> 
</bod> 
</html> 
0

那麼我有同樣的問題。最後添加asp:imgButton控件,並在處理程序後面添加一個OnClick =「」aspx.cs代碼。

他們點擊事件處理程序的處理程序是我想要我的linkbutton調用的處理程序,但不會在Mac上的Safari 7.0.1中使用。我在javascript中放置了一個OnClientClick =「return mylinkbuttonHandler()」客戶端處理程序,它只是調用了我的隱藏(因爲它們沒有分配圖像)imgButton的click事件; Javascript本身看起來像下面:

<script language="javascript" type="text/javascript"> 
     // Fake out Safari by creating imgButtons that fire the linkbutton code behind events 
     function saveButtonLogic() { 
      var buttonId = document.getElementById("hiddenSaveButton"); 
      buttonId.click(); 
      return false; 
     } 
     function submitButtonLogic() { 
      var buttonId = document.getElementById("hiddenSubmitButton"); 
      buttonId.click(); 
      return false; 
     } 
     function clearButtonLogic() { 
      var buttonId = document.getElementById("hiddenClearButton"); 
      buttonId.click(); 
      return false; 
     } 
    </script> 

嘿,它的醜陋,但它的工作很大。

相關問題