― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2008年12月15日(月) 06:06 
XPCOMのnsIWebBrowserSetupを使って制御しようとしましたが
エラー: SETUP_ALLOW_IMAGES is not defined
と出てしまいます。記述の仕方がおかしいのでしょうか。

コード:
var wbs = Components.classes['@mozilla.org/embedding/browser/nsWebBrowser;1']
.createInstance(Components.interfaces.nsIWebBrowserSetup);

wbs.setProperty(SETUP_ALLOW_IMAGES, PR_FALSE);


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2008年12月15日(月) 06:17 
環境を書くのを忘れていました・・。
OSはWindowsXP
ブラウザはFirefox 3.0.4です。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2008年12月16日(火) 00:01 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
apollo さんが書きました:
コード:
var wbs = Components.classes['@mozilla.org/embedding/browser/nsWebBrowser;1']
.createInstance(Components.interfaces.nsIWebBrowserSetup);

拡張機能で、新たなブラウザを作りたいのでしょうか?
おそらく、やりたいことは違うのではないかと思いますが…

apollo さんが書きました:
コード:
wbs.setProperty(SETUP_ALLOW_IMAGES, PR_FALSE);
その前に
コード:
const SETUP_ALLOW_IMAGES = Components.interfaces.nsIWebBrowserSetup.SETUP_ALLOW_IMAGES;
const PR_FALSE = 0;

とでもしておけば良いと思います。
が、おそらく(以下同文)


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2008年12月18日(木) 07:22 
回答ありがとうございます。

画像やJavaScriptが読み込み時の大きな原因ではないかと思い、
一番はじめにすべての画像を読み込ませないようにして、
必要なものだけ個別で画像を取得するような拡張機能を作りたいと思い質問させていただきました。

いただいた助言の通り、以下のように記述すると上記のエラーはでなくなりましたが
コード:
const SETUP_ALLOW_IMAGES = Components.interfaces.nsIWebBrowserSetup.SETUP_ALLOW_IMAGES;
const PR_FALSE = 0;


引用:
エラー: uncaught exception: [Exception... "Component returned failure code: 0x8000ffff (NS_ERROR_UNEXPECTED) [nsIWebBrowserSetup.setProperty]" nsresult: "0x8000ffff (NS_ERROR_UNEXPECTED)" location: "JS frame :: chrome://lobo/content/overlay.js :: <TOP_LEVEL> :: line 15" data: no]

というエラーが帰ってきてしまいました。

ご指摘の様にアプローチが違うのかと思い、setPrefを用いて
コード:
var pref = Components.classes["@mozilla.org/preferencesservice;1"]
         .getService(Components.interfaces.nsIPrefBranch);
pref.setIntPref("permissions.default.image",2);

としたところ、当面問題なく動作しましたのでご報告させていただきます。


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2009年1月07日(水) 10:04 
前回はお世話になりました。
独学でXPCOMのリファレンスやMDCで勉強していたのですが、どうしても解決できなかったので
再度質問させてください。

今回も同じテーマで、画像の読み込みを遅延させ(正確にはリクエストを一時中断し遅らせる)
ユーザの体感表示速度を向上させるような拡張機能(アドオン)を作りたいと思っています。

方針としては、nsIObserverServiceを用いてリクエスト作成時に
リクエストのヘッダを調べ、Acceptにimageが含まれていたら画像を取得しようとしてると判断し
nsIRequestのsuspendメソッドでそのリクエストを中断させたいと思っています。

以下がそのソースになります
コード:
var httpRequestObserver =
{
  observe: function(aSubject, aTopic, aState)
  {
    try {
          if (aTopic == 'http-on-modify-request') { // リクエストが作成されたらここへ分岐
              var httpChannel = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
              var httpRequest = httpChannel.QueryInterface(Components.interfaces.nsIRequest);
              if (httpChannel.getRequestHeader("Accept").match("image")) this.delay(httpRequest);
          } else if (aTopic == 'http-on-examine-response') {
          }
      }
      catch (err)
      {
      }
  },
  delay: function(Request){
//      Request.cancel(Components.results.NS_ERROR_ABORT);
      Request.suspend();               // リクエストを中断
      setTimeout(Request.resume,10000);   // リクエストを10秒後に再開
   }
};


/* オブサーバXPCOMを登録 */
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(httpRequestObserver, "http-on-modify-request", false);


参考にしたページをみると使用法に間違いはなさそうなのですが
実際はsuspend()しても、すぐ画像を取得してしまい効果がみられません。
一方で、cancel()をした場合は、思い通りにリクエストを中断し画像は表示されませんでした。
どうすればsuspendメソッドが思い通りに動くようになるのでしょうか?

JavaScript、拡張機能開発ともに経験が浅く、所々変な記述もみられるかもしれませんが、アドバイスいただけたら幸いです。

参考にしたページ
MDC:Setting HTTP request headers
XUL Planet:nsIRequest


通報する
ページトップ
  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean