Ошибка "Переменная не определена" в моем расширении Firefox

Я разрабатываю дополнение для Firefox. Когда я запускаю его, я открываю консоль браузера и там AMO_Uedit_Beta_Firefox is not defined :browser.xul,

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://Uedit/skin/skin.css" type="text/css"?>
<!DOCTYPE Uedit SYSTEM "chrome://Uedit/locale/translations.dtd">
<overlay id="Uedit-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script src="Uedit.js" />
    <toolbarpalette id="BrowserToolbarPalette">
        <toolbarbutton id="Uedit" class="toolbarbutton-1" label="Edit HTML" tooltiptext="Edit HTML" oncommand="AMO_Uedit_Beta_Firefox.Uedit()" />
    </toolbarpalette>
</overlay>

Кнопка на панели инструментов, которая вызывает функцию, которая является частью объекта (AMO_Uedit_Beta_Firefox).

Я дважды проверил имена, и они совпадают. Это потому, что скрипт не загружается должным образом? Я уверен, что имена переменных не могут начинаться с заглавных букв.

var AMO_Uedit_Beta_Firefox={ // This is for "wrapping the loose variables."

Обе ссылки файла одинаковы. Может быть потому, что скрипт вообще не загружался?

<toolbarbutton id="Uedit" class="toolbarbutton-1" label="Edit HTML" tooltiptext="Edit HTML" oncommand="AMO_Uedit_Beta_Firefox.Uedit()" />

Я попытался изменить относительный URL (<script src="Uedit.js" />) на абсолютный URL (<script src="chrome://Uedit/Uedit.js" />) в browser.xul, но теперь он просто возвращает пустое сообщение об ошибке.

Странное пустое сообщение об ошибке.

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

РЕДАКТИРОВАТЬ:

Я нашел решение. Я должен поставить строку JavaScript перед первым утверждением.

var AMO_Uedit_Beta_Firefox = { // Will not work!
    ...

Если я поставлю console.log в передней части, например.

console.log("");
var AMO_Uedit_Beta_Firefox = { // This will work!
    ...

Вопрос только в том, почему это работает?

3 ответа

Решение

Я нашел решение. Я должен поставить строку JavaScript перед первым утверждением.

var AMO_Uedit_Beta_Firefox = { // Will not work!
    ...

Если я поставлю console.log в передней части, например.

console.log("foo bar");
var AMO_Uedit_Beta_Firefox = { // This will work!
    ...

Я сам решил проблему, хотя решение странное.

Похоже, путь к Uedit.js файл неверный. Вы должны использовать абсолютный путь в своем оверлейном слое.

Как сказал Эрикволд, ссылка на ваш Uedit.js Сценарий неверен. Это минимум, который является неправильным и на который жалуются в консоли: browser.xul:5 строка 5 в browser.xul, который:

<script src="Uedit.js" />

Вы заявляете, что пытались:

<script src="chrome://Uedit/Uedit.js" />

Это не будет работать. Как минимум, это должно быть что-то вроде:

<script src="chrome://Uedit/content/Uedit.js" type="application/x-javascript" />

Обратите внимание content/ после //Uedit/, Тем не менее, это верно, предполагает, что вы настроили свой chrome.manifest с соответствующим content строка в дополнение к другим, подразумеваемым вашим кодом (skin а также locale). Это также предполагает, что Uedit.js находится в этом каталоге. Предполагая, что структура каталогов вашей надстройки нормальная, строка содержимого в вашем файле chrome.manifest будет выглядеть примерно так:

content        Uedit        chrome/content/

Что касается того, что он действительно работает, у нас нет способа узнать, будет ли он работать, поскольку вы не включили исходный код, который определяет все AMO_Uedit_Beta_Firefox а конкретно нет AMO_Uedit_Beta_Firefox.Uedit(), Например, в дополнение к вышеупомянутой проблеме, может легко быть синтаксическая ошибка, которая препятствует загрузке сценария. Такая синтаксическая ошибка приведет к тому, что консоль сообщит, что AMO_Uedit_Beta_Firefox был неопределен при попытке выполнить AMO_Uedit_Beta_Firefox.Uedit() как код для toolbarbutton"s oncommand,

Вы можете легко проверить, если ваш Uedit.js скрипт загружается, когда что-то печатается в консоли при загрузке скрипта (т.е. вне определения AMO_Uedit_Beta_Firefox).

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