Вопрос по javascript – JavaScript window.opener вызывает родительскую функцию

13

Я пытаюсь вызвать функцию JavaScript, определенную в родительском из дочернего окна. У меня есть два файла, как это:

родитель:

<html>
<head>
<title>Test</title>
<script type="text/javascript">
function foo () {
alert ("Hello from parent!");
}
function doStuff () {
var w = window.open("testa.html");
}
</script>
</head>
<body>
<input type="button" value="open" onClick="doStuff();" />
</body>
</html>

И ребенок:

<html>
<head>
<title>Test A</title>
<script type="text/javascript">
function get() {
window.opener.foo();
}
</script>
</head>
<body>
<input type="button" value="Call Parent" onClick="get();" />
</body>
</html>

Я не могу при жизни вызвать функцию foo из дочернего процесса. Я думал, что это должно быть возможно с объектом window.opener, но я не могу заставить эту работу работать. Какие-либо предложения?

Что такое http: // и file: ///? как поменять его с одного на другой. У меня та же проблема? Пожалуйста помоги. Rahul Khandelwal
Оказалось, что это была проблема - я просто обращался к ним через файл: //. Когда я добавляю их в каталог http: //, он работает просто отлично. RPIBuckHunter
Вы обращаетесь к этим страницам черезhttp:// или жеfile:///?file Протокол не имеет источника, поэтому вы всегда ошибетесьSOP, рендерингopener недоступны. Jonathan Lonowski
@RahulKhandelwal Вы, вероятно, обращаетесь к своей странице локально на своем компьютере, не используя такой сервер, как apache / nginx [например, - xampp в windows]. Так что, просто открыв страницу двойным нажатием, вы откроете ее в браузере сfile:/// протокол, а неhttp:// DeadLock

Ваш Ответ

2   ответа
16

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

Будет ли это работать для https: //?
1

Каждый браузер может загружать страницы с сервера или из локальной файловой системы. Чтобы загрузить файл из локальной файловой системы, вы должны добавить в браузер такой адресfile://[path]где [путь] - это абсолютный путь к файлу в файловой системе (включая букву диска в Windows, см.http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx для деталей).

Чтобы загрузить файл с локального HTTP-сервера (если он у вас есть), вы должны указать что-то вроде этогоhttp://localhost:[port]/[path]где [порт] - это порт, на котором работает ваш сервер (по умолчанию 80), а [путь] - это путь к файлу относительно корневой папки документа сервера. Корневая папка документа зависит от конфигурации сервера.

Итак, как вы видите, один и тот же локальный файл может быть загружен в браузер двумя способами. Однако между этими двумя способами существует большая разница. В первом случае браузер не использует HTTP-протокол для загрузки файла и, следовательно, отсутствует много вещей, необходимых для правильной работы различных механизмов. Например, AJAX не работает с локальными файлами, поскольку статус ответа HTTP не равен 200 и т. Д.

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

Похожие вопросы