Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№116-02-2009 12:54:25

evgenmax
Участник
 
Группа: Members
Зарегистрирован: 22-09-2006
Сообщений: 9
UA: Firefox 3.0

Код работает на странице, не работает в расширении

Учусь писать расширения :)
Пример взял отсюда 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

Отредактировано evgenmax (16-02-2009 13:01:19)

Отсутствует

 

№216-02-2009 14:03:18

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: Код работает на странице, не работает в расширении

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

Выделить код

Код:

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

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№323-02-2009 20:13:27

evgenmax
Участник
 
Группа: Members
Зарегистрирован: 22-09-2006
Сообщений: 9
UA: Firefox 3.0

Re: Код работает на странице, не работает в расширении

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, ничего не помогает.

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

Отсутствует

 

№423-02-2009 20:43:32

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: Код работает на странице, не работает в расширении

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

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

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


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№523-02-2009 20:50:24

evgenmax
Участник
 
Группа: Members
Зарегистрирован: 22-09-2006
Сообщений: 9
UA: Firefox 3.0

Re: Код работает на странице, не работает в расширении

Anton пишет

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

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

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

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

Отсутствует

 

№623-02-2009 21:02:17

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: Код работает на странице, не работает в расширении

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

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


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№725-02-2009 20:48:12

ipSlicer
Участник
 
Группа: Members
Зарегистрирован: 25-02-2009
Сообщений: 6
UA: Firefox 3.0

Re: Код работает на странице, не работает в расширении

Выделить код

Код:

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, но эта конструкция работает только на моеме компе, если размещать на сайте, то, как мне уже ответили, политика безопасности не позволит сохранить файл на локальный диск из интернет-сайта.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]