«error: ReferenceError: Ошибка безопасности: попытка чтения защищенной переменной: запись» в Opera 11.5 и window.open и document.write - PullRequest
3 голосов
/ 28 сентября 2011

У меня проблема с window.open, которая возникает только в Opera (версия 11.5).

function openpageopera()
{
  var w = window.open("","_blank");
  try
  {
    w.document.write("<p>hello</p>world");
    w.document.close();
  }
  catch(err)
  {
    alert("error:" + err);
  }
}

Теперь, это работает безупречно, когда я выполняю эту функцию после загрузки страницы, ergo:

$(document).ready(function() {
  openpageopera();
});

И это также работает, если я открываю URL-адрес, такой как Google, Yahoo или даже веб-страницу с моего веб-сервера.

Однако, когда я присоединяю его к событию onclick, как на кнопке HTML, происходит сбой.

<input type="button" value="Fails" onclick="openpageopera();">

Что конкретно не получается? Ну, страница действительно открывается, но она пуста. document.write НЕ работает. Улов отметил ошибку:

ошибка: ошибка ссылки: ошибка безопасности: попытка чтения защищенной переменной: запись

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

Большое спасибо за помощь!

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Если где-то есть код , устанавливающий document.domain, это может изменить контекст безопасности родительской страницы. (Это также происходит, если для document.domain задано его текущее значение.) Когда вы открываете "" или about: blank, должно наследовать контекст безопасности родителя и document.write() должно работать - но я знаю, что Opera имела некоторые ошибки в прошлом, когда установка document.domain вызывала проблемы при работе с пустыми всплывающими окнами. Я считаю, что эти ошибки исправлены в 11.50, но похоже, что вы столкнулись с подобной проблемой. Не устанавливайте document.domain, если можете ..

Если вы видите, что эта проблема возникает снова, пожалуйста, дайте мне знать, и желательно, чтобы я видел полный код. Я хотел бы прибить эту ошибку в каждом воплощении ..

Кстати, имейте в виду, что пользовательские JS, расширения и даже JS, запускаемые из плагинов, также могут связываться с document.domain, поэтому попробуйте отключить все, что может помешать.

1 голос
/ 28 сентября 2011

Я закончил очистку всех личных данных в браузере Opera, и это сработало.Однако каждый раз, когда я загружал страницу, я нажимал клавишу shift или ctrl, чтобы очистить кэш.Либо это была проблема с кешем, либо что-то совсем другое.

...