如何在Chrome浏览器中调用父窗口函数?

时间:2010-03-31 06:14:21

标签: javascript jquery iframe google-chrome

HI, 我惊奇地发现在Chrome浏览器中调用窗口父javascript函数存在问题。 如果我有一个定义了javascript函数的窗口

<script type="text/javascript">
  function dolink() {
   . . .
  }
</script>

我在该窗口中有一个 iframe ,使用jquery进行此调用

<script type="text/javascript">
 $(function() {
      $('a.arglink').click(function() {
         window.parent.dolink($(this).attr('href'));
         return false;
      });
 });
</script>

dolink 功能的调用不起作用。使用chrome javascript调试器步进,似乎window.parent.dolink是 undefined 。这是设计还是我犯的错误? 在Firefox和IE中,它可以正常工作。

4 个答案:

答案 0 :(得分:9)

终于找到了它!

Chrome浏览器似乎不允许引用使用 file:协议访问网页的父窗口。事实上,我在上面的代码中使用我的机器上的文件进行了测试,因此使用了file:///C:/mytests/mypage.html这样的网址。如果我将该页面放在Web服务器中,它将按预期工作。

答案 1 :(得分:4)

你应该像这样调用代码

if(function != undefined)
{
 $(function() {
      $('a.arglink').click(function() {
         window.parent.dolink($(this).attr('href'));
         return false;
      });
 });
}

答案 2 :(得分:2)

使用frameElementownerDocument

怎么样?
<script type="text/javascript">
 $(function() {
      $('a.arglink').click(function() {
         window.frameElement.ownerDocument.parentWindow.dolink($(this).attr('href'));
         return false;
      });
 });
</script>

答案 3 :(得分:0)

我只是做了这个,它对我有用

iframe中的

function sendToParent() {
    parent.doSomething(); 
}
sendToParent();
在父母

function doSomething() {
    alert('did it!')
}