Можно ли выполнить javascript в новом окне с помощью window.location.href?

Я пытаюсь открыть новое окно и выполнить код javascript на новой странице.

Я не совсем уверен, почему он не выполняет код - может быть, это невозможно - в любом случае открывается новое окно, но javascript не выполняется.

Вот мой код:

var nstart = window.open("http://examplepage.html");

function loginnow(){
var htmlstring = "javascript: var zTextFields = window.document.getElementsByTagName(\"input\"); for (var i=0; i < zTextFields.length; i++) {thefield=zTextFields[i].name; if (!thefield) thefield=zTextFields[i].id; if (thefield == \"login\") zTextFields[i].value=\"_ext_cancom\"; if (thefield == \"password\")zTextFields[i].value=\"canfinag?!\";} window.document.getElementById(\"sign-in\").click();";

nstart.location.href = htmlstring;
}

nstart.addEventListener('load', loginnow, true);

Возможно ли вообще выполнить такой код? Пожалуйста, помогите ^-^ Я также использую '\' в качестве escape-символа, поэтому я могу использовать " в строке -> \"

Когда я заменяю \" на "и напрямую вставляю его на страницу, скрипт работает нормально...


person HappyLiooon    schedule 29.07.2014    source источник


Ответы (2)


Возможно, вы можете добавить javascript, который хотите выполнить, на новую новую страницу, а затем запустить его когда документ готов. Таким образом, вы можете просто открыть новую страницу, JS запустится автоматически.

person recluising    schedule 29.07.2014
comment
я не могу изменить страницу - это веб-страница из локальной службы, работающей на серверном компьютере - person HappyLiooon; 29.07.2014

Если новое окно находится в том же домене, вы можете получить доступ к содержимому, выполнив что-то вроде этого.

var nstart = window.open("http://examplepage.html");

function loginnow() {
  var zTextFields = nstart.document.getElementsByTagName("input"); 
  for (var i=0; i < zTextFields.length; i++) {
    thefield=zTextFields[i].name;
    if (!thefield) 
      thefield=zTextFields[i].id; 
    if (thefield == "login") 
      zTextFields[i].value="_ext_cancom"; 
    if (thefield == "password")
      zTextFields[i].value="canfinag?!";
  } 
  nstart.document.getElementById("sign-in").click();
}

nstart.addEventListener('load', loginnow, true);

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

person Shannon Poole    schedule 29.07.2014
comment
хммм - это выглядит хорошо для меня, но по какой-то причине функция не выполняется (как родительская, так и дочерняя страница)... мой мозг начинает таять... ^^ - person HappyLiooon; 29.07.2014
comment
хм, попробуйте изменить слушателя на документ. nstart.document.addEventListener('load', loginnow, true); - person Shannon Poole; 29.07.2014
comment
ах, к сожалению, похоже, что это событие никогда не срабатывает с всплывающими окнами. Вероятно, вам понадобится что-то, что опрашивает состояние готовности документа. - person Shannon Poole; 29.07.2014