Предупреждение JavaScript не работает в Firefox 6

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

javascript:alert("Hello")

Я получаю

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

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

Ответ 1

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

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

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

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

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

Сейчас:

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

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

Ответ 2

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

Замена этого, если вы пытаетесь отладить свою веб-страницу, - это веб-консоль (не путать с консолью ошибок). В компактном меню он находится под веб-разработчиком; в полной строке меню, в разделе "Инструменты". Или вы можете нажать ctrl-shift-K (cmd-shift-K на macs). Бар с надписью "больше, чем" - это подсказка для JavaScript; введенный код будет оцениваться в контексте текущей страницы. Все, что находится над областью над надписью, можно щелкнуть, чтобы открыть окно инспектора.

Ответ 3

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

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

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

Расширение немного особенное, потому что кнопки работают на уровне Chrome Chrome, поэтому они немного более привилегированы (вы можете взаимодействовать с API-интерфейсом браузера), и там нет 1-to- 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 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 и Кажется, это работает. Я не тестировал его полностью, но с очень сложными случаями.

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