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