Оповещение JavaScript не работает в Firefox 6 - PullRequest
21 голосов
/ 11 июля 2011

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

javascript:alert("Hello")

Я получил

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

Раньше он работал нормально в Firefox 5, но все еще работает в Opera, Safari и Chrome.Как это исправить?

Ответы [ 3 ]

21 голосов
/ 11 июля 2011

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

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

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

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

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

Сейчас:

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

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

10 голосов
/ 11 июля 2011

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

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

1 голос
/ 07 марта 2012

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

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

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

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

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

...