6

HI, I've surprisingly found problems, in Chrome browser, in calling window parent javascript functions. If I have a window with a javascript function defined in it

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

and I have an iframe inside that window that makes this call using jquery

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

the call to dolink function doesn't work. Stepping with chrome javascript debugger, it appears that window.parent.dolink is undefined. It's by design or a mistake that I made? In Firefox and IE it works fine.

Pier Luigi
  • 7,871
  • 9
  • 36
  • 46

4 Answers4

9

Finally found it!

It seems that Chrome browser doesn't permit to reference a parent window accessing pages with the file: protocol. In fact I tested above code with files on my machine, so with a url like file:///C:/mytests/mypage.html . If I put that page in a Web Server, it all works as expected.

Pier Luigi
  • 7,871
  • 9
  • 36
  • 46
4

you should call code like that

if(function != undefined)
{
 $(function() {
      $('a.arglink').click(function() {
         window.parent.dolink($(this).attr('href'));
         return false;
      });
 });
}
Marcel Korpel
  • 21,536
  • 6
  • 60
  • 80
azeem
  • 41
  • 1
2

What about using frameElement and ownerDocument

<script type="text/javascript">
 $(function() {
      $('a.arglink').click(function() {
         window.frameElement.ownerDocument.parentWindow.dolink($(this).attr('href'));
         return false;
      });
 });
</script>
Alsciende
  • 26,583
  • 9
  • 51
  • 67
0

I just simply did this and it works for me

in iframe

function sendToParent() {
    parent.doSomething(); 
}
sendToParent();

in parent

function doSomething() {
    alert('did it!')
}
Selim Özbudak
  • 149
  • 2
  • 8