Вызов функции Javascript через окна HTML - PullRequest
2 голосов
/ 25 июля 2011

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

var w = window.open("index.html");
console.log(w);
console.log(w.foo);

console.log(w) показывает, что есть функция с именем foo, но console.log(w.foo) выводит undefined. Это проблема безопасности?


РЕДАКТИРОВАТЬ Вот еще некоторые функции:

child.html (без тела):

<head>
 <script type="text/javascript"> 
  test = 123 ;
  function foo(arg){
   //do something
  }
 </script>
</head>

parent.html:

var w = window.open("child.html");
console.log(w);
//outputs all the methods and parameters
console.log(w.foo);
//outputs 'undefined'
console.log(w.test);
//outputs 'undefined'

РЕДАКТИРОВАТЬ 2 Также я должен объяснить, почему мне нужно передавать аргументы, поскольку кто-то неизбежно спросит меня, почему я не могу «просто жестко закодировать это». У меня есть элемент HTML-холста, и каждый раз, когда пользователь щелкает правой кнопкой мыши, появляется меню, вызываемое правой кнопкой мыши, с опцией «формы списка внизу».

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

  1. Я не могу передать его в качестве аргумента b / c. Я не знаю, было ли загружено окно (похоже, я тоже не могу изменить функцию onload)

  2. У меня не может быть запроса дочернего окна к родительскому окну b / c, меню щелчка правой кнопкой мыши исчезает после нажатия на него.

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Проблема в том, что вы не предоставляете DOM дочернего окна возможность загрузки, прежде чем пытаться проверить его содержимое.

console.log(w), по-видимому, работал, отображая Window или подобное сразу, но на самом деле это просто, когда ваши человеческие пальцы занялись расширением деталей элемента в консоли, свойства и методы были настоящее время

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

В этом вопросе говорится о добавлении прослушивателей событий onLoad для детей. Используя принятый ответ, как насчет:

<script type="text/javascript">
// parent.html
var w;

function lol() {
    console.log(w.foo);
    console.log(w.test);
}

w = window.open("child.html");
console.log(w);
w.addEventListener('load', lol, true);
</script>

(я также смог добиться успеха с задержкой в ​​1с setTimeout.)

0 голосов
/ 25 июля 2011

Ответ довольно прост, если вы посмотрите на свой код логически

Следующие два вызова будут работать только в открывшемся окне.

console.log(w.foo);
//outputs 'undefined'
console.log(w.test);
//outputs 'undefined'

т.е.

console.log(foo);

в родительском окне javascript и

console.log(window.parent.foo);

в дочернем окне javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...