Оповещение JavaScript не работает в Firefox 6

Я попытался запустить этот код JavaScript в адресной строке в Firefox 6:

javascript:alert("Hello")

Я получаю

ReferenceError: предупреждение не определено.

Хотя раньше он отлично работал в Firefox 5, и до сих пор работает на Opera, Safari и Chrome. Как это исправить?

3 ответа

Решение

Кажется, используя javascript: а также data: URL (непосредственно в адресной строке) в настоящее время не разрешены согласно этому комментарию:

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

Краткосрочный: запретить вставку JavaScript: URL-адреса в адресную строку
Долгосрочный: дополнительно требуется, чтобы букмарклеты были "внесены в белый список" в Диспетчере закладок, прежде чем он сможет запускать JavaScript

И это "ошибка", которая была устранена в последней версии. Последний комментарий также гласит:

javascript: на самом деле не игнорируется - они запускаются, но в "пустом" контексте, в котором нет ни одного обычного метода DOM, который вы ожидаете, поэтому наиболее распространенные варианты использования (например, javascript:alert(1)) просто throw (и, таким образом, эффективно игнорируются). JavaScript:1+1 работает хорошо, хотя.

Сейчас:

Как это исправить?

Вы не можете, вы должны подождать, пока они не примут правильное решение. Как сказано в комментарии, букмарклеты будут работать, но должны быть явно разрешены. Если вы просто хотите протестировать код, используйте Firebug или новую функцию Scratchpad.

Ответ Феликса правильно утверждает, почему javascript: в строке URL больше не работает.

Этой заменой, если вы пытаетесь отладить свою веб-страницу, является веб-консоль (не путать с консолью ошибок). В компактном меню он находится под Web Developer; в полной строке меню, это под Сервис. Или вы можете нажать ctrl-shift-K (cmd-shift-K на Mac). Строка со знаком больше, чем подсказка JavaScript; введенный там код будет оцениваться в контексте текущей страницы. На что-нибудь в области над этой линией, которая подчеркнута, можно щелкнуть, чтобы открыть окно инспектора.

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

Преимущества кнопки перед запуском от Scratchpad:

  • вы можете сохранить букмарклет (кнопку),
  • у вас может быть хорошая собственная иконка (создайте какое-нибудь изображение, например PNG-файл, импортируйте его и base64_encode в диалоге новой кнопки).

Расширение немного особенное, потому что кнопки работают на уровне Chrome Firefox, поэтому они немного более привилегированы (вы можете взаимодействовать с API браузера), и нет никакого соответствия 1: 1 между обычным JS и кодом кнопки (это нуждается в некоторой настройке). Точнее, document а также window видно из кнопки не те, которые вы ожидали.

Тем не менее, вы можете назначить "хорошо" window а также document к вашим переменным, а затем поработайте над этими переменными (лучше не переопределять окно;)

Вот пример кода, который я написал, который хорошо работает в Fx10:

// get proper 'window' and 'document' into our private variables
var theWindow = window.top.getBrowser().selectedBrowser.contentWindow;
var theDocument = theWindow.document;

// here we go
var input = theDocument.getElementById("foo");
input.focus(); // just to show you it's working, unnecessary in fact

// simulate keyboard event
var evt = theDocument.createEvent("KeyboardEvent");
evt.initKeyEvent ("keypress", true, true, theWindow ,
            0, 0, 0, 0, 0, 65); // 65 == "A"
input.dispatchEvent(evt);

// show alert after 2 sec
theWindow.setTimeout( function(){
  input.value += "B";
  theWindow.alert(input.value); // alerts "AB"
},2000);

Вместо непосредственного использования глобальных функций (например, setTimeout, или же alert), вы должны поставить theWindow. до них и заменить document/window с местными theDocument/theWindow и это, кажется, работает. Я не проверил это тщательно, однако с очень сложными случаями.

Чтобы добавить кнопку, щелкните правой кнопкой мыши по любой кнопке, которая у вас есть, и выберите "Добавить новую кнопку...".

Другие вопросы по тегам