Дочерний элемент window.open не вызывает функцию в родительском окне

#javascript #google-chrome

#javascript #google-chrome

Вопрос:

parent.html

 <html>
    <head>
        <script type="text/javascript">
            function openWin()
            {
                myWindow=window.open('child.html','','width=200,height=100');
            }
            function callback(){
                alert("test");
            }
        </script>
    </head>
    <body>
        <input type="button" value="Open 'myWindow'" onclick="openWin()" />
    </body>
</html>
  

child.html

 <html>
    <head>
       <script type="text/javascript">
          window.opener.callback();
       </script>
    </head>
    <body>
    </body>
</html>
  

И проблема в том, что дочерняя страница вызывает функцию обратного вызова родительской страницы в FF, IE, но не в Chrome.

Есть идеи?

Комментарии:

1. У меня работает. Вы получаете какую-либо ошибку в консоли?

2. Вы пробовали на дочерней странице поместить: <body onload=»javascript:window.opener.callback();»???

3. @Vismari Не помещает javascript: scheme в атрибуты события. Просто вставьте свой код. javascript: Фрагмент интерпретируется как метка, это ненужно и сбивает с толку.

Ответ №1:

Проблема возникает из-за ошибки безопасности Chrome. Домены, протоколы и порты должны совпадать. Но это также происходит, когда страница открыта из локальной файловой системы.

Откройте свою страницу с сервера, это должно быть без каких-либо проблем.

Ответ №2:

Проблема может заключаться в том, как chrome запускает javascript. Chrome иногда запускает js слишком быстро и рано, и даже DOM не готов к манипуляциям. Попробуйте это в вашем child.html

 <script type="text/javascript">
setTimeout(function(){window.opener.callback();}, 100);
</script>
  

Я не уверен, что это именно та проблема, с которой вы столкнулись, я столкнулся с этой проблемой с jQuery.ready () в chrome.

Комментарии:

1. …ммм, я думаю, что DOM открывателя, безусловно, уже загружен.