Учусь писать расширения :)
Пример взял отсюда http://forum.mozilla-russia.org/viewtopic.php?id=8970 , пока даже автора и GUID не поменял.:)

Файл с кодом content\mhookforms.js:

function doLoad() {
   alert('Load page');

   }
window.addEventListener("load",  doLoad(), true);

Такой же код на веб странице между тегами <script> ... </script> выдает сообщение при каждом обновлении, а в расширении только при открытии нового окна.
Причем сначала появляется окно с сообщением 'Load page', а после нажатия на "ОК" появляется и загружается окно:)

В консоли ошибка: "uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: chrome://mhookforms/content/mhookforms.js :: <TOP_LEVEL> :: line 10" data: no]".

В чем тут проблема, подскажите ?

Вместо "load" пробовал "DOMContentLoaded", то же самое


Файл content\mhookforms.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://mhookforms/content/mhookforms.css" type="text/css"?>
<overlay id="mhookforms" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script type="application/x-javascript" src="mhookforms.js" />
</overlay>

Firefox 3.0.6

В чем тут проблема, подскажите ?

Выделить код

Код:

window.addEventListener("load",  doLoad /*() <-- скобки тут лишние */, true);
Anton пишет

В чем тут проблема, подскажите ?

Выделить код

Код:

window.addEventListener("load",  doLoad /*() <-- скобки тут лишние */, true);

Спасибо! Помогло!
Опять дело встало. Наверное, опять со скобками напутал.:/

Пытаюсь из расширения записывать-читать файлы.
Файл io.js в папку content положил.
В content\mhookforms.xul  прописал:
<script type="application/x-javascript" src="io.js" />

Код content\mhookforms.js такой:

Выделить код

Код:

function doLoad() {

   if (getBrowser().contentDocument.location.host=='www.site.ru'){
   alert('Load page');
var fileIn = FileIO.open('с:\\test.txt');
	alert (fileIn);

var s = FileIO.read (fileIn);
alert('File read: ' + s);

var rv = FileIO.write(fileIn, 'Содержимое файла');
alert('File write: ' + rv);
                                                                  }
 
   }

window.addEventListener("DOMContentLoaded",  doLoad, true);

Второй алерт выдает: "xpconnect wrapped nsILocalFile"

Это, как я понимаю, значит, что файл открылся и в переменной ссылка на интерфейс:rolleyes:
Следующие два алерта выдают "false"

Пробовал и так: FileIO.write (fileIn, 'Содержимое файла', "w", "windows-1251"), и так: FileIO.write (fileIn, 'Содержимое файла', "", "windows-1251") и без read, ничего не помогает.

В чем тут дело?:/

Следующие два алерта выдают "false"

c:\\test.txt не существует, поэтому и false.

А прежде чем писать в файл, его надо создать: FileIO. create (file)
Кажется, так.

Anton пишет

Следующие два алерта выдают "false"

c:\\test.txt не существует, поэтому и false.

А прежде чем писать в файл, его надо создать: FileIO. create (file)
Кажется, так.

Я вручную его создал... С помощью блокнота...
Нужно обязательно в программе?

Я вручную его создал... С помощью блокнота...

Возможно, не в корне диска c: или имя не test.txt ?
Я нашёл одно из определений FileIO здесь: http://forum.mozilla-russia.org/viewtopic.php?pid=215699#p215699
И у меня работает именно так - файла нет - false, файл есть - строка.

Выделить код

Код:

fn="C:\\test.txt"; content="русский текст";

      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

      var uniConv = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
      uniConv.charset = "windows-1251"; content = uniConv.ConvertFromUnicode(content);

      var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);            
      file.initWithPath(fn);

      if (!file.exists()) file.create(0, 0664);
      var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
      out.init(file, 0x02 | 0x08 | 0x20, 0666, null);
      out.write(content, content.length);
      out.flush();
      out.close();

Вот рабочий код. FF 3.0.6, но эта конструкция работает только на моеме компе, если размещать на сайте, то, как мне уже ответили, политика безопасности не позволит сохранить файл на локальный диск из интернет-сайта.