2014-01-21 29 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> 

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

相关问题