Оповещение 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
и это, кажется, работает. Я не проверил это тщательно, однако с очень сложными случаями.
Чтобы добавить кнопку, щелкните правой кнопкой мыши по любой кнопке, которая у вас есть, и выберите "Добавить новую кнопку...".