2009-07-09 1 views
0

Я думаю, что мое название было достаточно информативным. :)Каков наиболее совместимый способ закрыть дочернее окно и сообщить его родительское окно в JavaScript?

Я закрыть окно ребенок так:

self.close(); 

Незадолго до этого, я хочу родительское окно знать, что ребенок закрыл. Я использование этого:

window.opener.startLoad(); 

выше будет работать функцию, которая находится на родительском окне, что мне это нужно, чтобы запустить после закрытия дочернего окна.

Однако это привело к мне получаю сообщение об ошибке:

Permission denied to get property Window.startLoad 
window.opener.startLoad(); 

Даже если я мог бы исправить эту ошибку, мне сказали, что может быть связано с JavaScript файлов, находясь в другой папке, и поэтому рассматривается как другой домен. Будет ли это работать во всех браузерах? Если нет, есть ли более безопасное решение, эффективное и совместимое во всех браузерах?

Благодарим за помощь.

+0

другая папка? субдомен, возможно, папка №. можете ли вы указать путь example.com, в котором будут находиться родитель и ребенок? Обновляется ли родитель? – epascarello

+0

Родитель не освежает, но делает запросы AJAX. Родитель имеет свой файл js в папке «./js», а дочерний элемент находится в папке «.». с его js в том же месте. Я думаю, что это не имеет большого значения, поскольку я проверил его, поместив их в один и тот же каталог, но я получаю ту же ошибку! – Abs

ответ

1

Это должно работать до тех пор, пока всплывающее окно находится из того же домена, что и родительский, иначе из-за ограничений безопасности он никогда не будет работать. Папка не имеет значения.

if (window.opener && window.opener.startLoad) 
{ 
    window.opener.startLoad(); 
} 
+0

Я все еще такая же ошибка. Почему вы считаете, что его размещение в условном выражении может иметь значение? Я не пытаюсь вас расспрашивать, я просто пытаюсь понять вашу логику. :) – Abs

+0

Я был более просто давал код, который я использую, который проверяет действительный родитель и функцию. Это работает, если они не находятся в одном домене - в этом случае вы получаете эту ошибку. Ваши? – cdm9002

+0

Мои сценарии находятся в одном домене и даже в той же папке. Тем не менее, дочернее окно при его первом открытии переходит на другой сайт, а затем перенаправляется обратно на мой сайт и затем закрывается. Затем он пытается запустить функцию из родительского окна, которое, похоже, терпит неудачу. – Abs

0

С некоторыми из моих тестовых страниц Javascript, при использовании его в IE, он дает ошибку локально, но загрузить файл в Интернете и открытие его оттуда работает. Возможно, у вас есть странный параметр безопасности, который не позволяет вам делать запросы в одном домене во время работы из локального файла. Попробуйте разместить страницы на веб-узле и посмотреть, работает ли это.

+0

Я только что проверил на другой машине с другим браузером, и я получаю ту же ошибку. Детское окно перенаправляется с другого сайта на мой сайт, где находится JS-скрипт, приведет ли это перенаправление к проблеме? – Abs

+0

Да, сбой из-за безопасности межсайтового скриптинга. Вы должны открыть дочернее окно из своего собственного домена. – cdm9002

+0

Я открываю из собственного домена, его просто перенаправляют на другой сайт, а затем обратно. Но в конечном счете я открываю дочернее окно. – Abs

Смежные вопросы