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

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№104-12-2011 16:46:11

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 9.0

tabbrowser.addTab: как открыть страницу в нужной кодировке?

Ситуация: имеется файл, представляющий из себя plain text в UTF-8 w/o BOM. Задача проста: открыть файл в новой вкладке в кодировке именно UTF-8, т.к. файл содержит русскоязычный текст. Вызов addTab в виде

addTab( URL, {referrerURI: ..., charset: ..., postData: ..., owner: ..., allowThirdPartyFixup: ..., relatedToCurrent: ... })

Выделить код

Код:

addTab("file:///c:/tmp/123.txt",{charset: "UTF-8"})

- не работает: файл открывается в кодировке ISO-8859-1. Пробовал вызывать метод в такой форме:

addTab( URL, referrerURI, charset, postData, owner, allowThirdPartyFixup ) 

Выделить код

Код:

addTab("file:///c:/tmp/123.txt", null, "UTF-8")

- та же самая ситуация: кодировка при открытии - ISO-8859-1.
Заглянул в tabbrowser.xml и в browser.xml: всё вышеупомянутое в итоге сводится к вызову метода loadURIWithFlags экземпляра xul:browser. Выглядит он так:

Выделить код

Код:

<method name="loadURIWithFlags">
  <parameter name="aURI"/>
  <parameter name="aFlags"/>
  <parameter name="aReferrerURI"/>
  <parameter name="aCharset"/>
  <parameter name="aPostData"/>
  <body>
    <![CDATA[
    if (!aURI)
      aURI = "about:blank";

    if (aCharset) {
      try { 
        this.documentCharsetInfo.parentCharset = this.mAtomService.getAtom(aCharset);
      }
      catch (e) {
      }
    }

    if (!(aFlags & this.webNavigation.LOAD_FLAGS_FROM_EXTERNAL))
      this.userTypedClear++;

    try {
      this.webNavigation.loadURI(aURI, aFlags, aReferrerURI, aPostData, null);
    } finally {
      if (this.userTypedClear)
        this.userTypedClear--;
    }
    ]]>
  </body>
</method>

Сделал вызов этого метода - ситуация абсолютно аналогичная, указание кодировки ни на что не влияет. Ради интереса выставил у уже загруженного документа кодировку вручную, и посмотрел, чему равен this.documentCharsetInfo.parentCharset экземпляра xul:browser - он оказался равен... null.
В общем, пока я делаю так: при уже загруженном документе

Выделить код

Код:

var docCharset = gBrowser.docShell.QueryInterface(Ci.nsIDocCharset);
docCharset.charset = "UTF-8";
PlacesUtils.history.setCharsetForURI(getWebNavigation().currentURI, "UTF-8");
BrowserReloadWithFlags(nsIWebNavigation.LOAD_FLAGS_CHARSET_CHANGE);

Этот код работает именно так, как требуется, но есть одно "но": документ, который я собираюсь загружать - результат некоторой генерации, и результат достаточно объемный - не хотелось бы его сначала загружать, а потом перегружать в нужной кодировке. Нужно сразу загрузить в требуемой кодировке.

Отсутствует

 

№204-12-2011 19:26:18

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 9.0

Re: tabbrowser.addTab: как открыть страницу в нужной кодировке?

okkamas_knife пишет

как он загрузится в таком случае?

Можно сделать еще проще: открыть пустую вкладку, для неё выставить UTF-8, и в эту вкладку загрузить нужный документ - так тоже работает нормально. Мне просто интересно, можно ли добиться от стандартного метода того поведения, которое описано в документации.

Отсутствует

 

Board footer

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