3

Mozillaのアドオンビルダーでオブザーバーを定義し、http-on-modify-requestリクエストをリダイレクトしたいのですが(変更subject.URI.spec)、Firefoxは次のように文句を言います。

Error: An exception occurred.
Traceback (most recent call last):
  File "http://chrome.angrybirds.com/", line 2536, in null
  File "http://chrome.angrybirds.com/", line 2344, in null
  File "http://chrome.angrybirds.com/", line 2988, in wi
  File "http://chrome.angrybirds.com/", line 1756, in ti
  File "http://chrome.angrybirds.com/", line 1231, in Ji
  File "http://chrome.angrybirds.com/", line 3366, in Ri
  File "http://chrome.angrybirds.com/", line 2381, in Di
  File "http://chrome.angrybirds.com/", line 2956, in Ni
  File "http://chrome.angrybirds.com/", line 3366, in DHb
  File "http://chrome.angrybirds.com/", line 3340, in oHb
  File "http://chrome.angrybirds.com/", line 1869, in Eic
  File "http://chrome.angrybirds.com/", line 3285, in BS
  File "http://chrome.angrybirds.com/", line 3362, in _Jb
  File "http://chrome.angrybirds.com/", line 3054, in _Bb
  File "http://chrome.angrybirds.com/", line 2020, in dJb
  File "http://chrome.angrybirds.com/", line 2889, in fJb
  File "resource://jid0-[snipped id]-api-utils-lib/observer-service.js", line 176, in null
    this.callback(subject, data);
  File "resource://jid0-[snipped id]-moddedbirds-url-rewriter-lib/main.js", line 11, in null
    if(endsWith(s.URI.spec,search)) s.URI.spec=replace;
[Exception... "Component returned failure code: 0x80004004 (NS_ERROR_ABORT)
  [nsIURI.spec]"  nsresult: "0x80004004 (NS_ERROR_ABORT)" location: "JS frame
  :: resource://jid0-[snipped id]-api-utils-lib/securable-module.js
  -> resource://jid0-[snipped id]-moddedbirds-url-rewriter-lib/main.js ::
  <TOP_LEVEL> :: line 11"  data: no]

なぜそれが機能しないのですか?

たぶん、http-on-modify-requestオブザーバーを使用してURIを書き換えることはできませんか?

それ、どうやったら出来るの?

4

1 に答える 1

3

はい、nsIChannelドキュメントには「チャネルに対応するURI。その値は不変です。読み取り専用」と記載されています。そして、不変のチェックは確かにNS_ERROR_ABORT(ソース)を返すようです。

あなたにとって残念なことに、この男(Firefox Extensionsのリダイレクトリクエスト(nsiHttpChannel?))は彼が見つけた解決策を投稿しませんでした。また、この質問はここここでmozillazineで尋ねられます。

私が持っている最良のアイデアは、これにはあまりにも多くの作業です:nsITraceableChannelを試してみてください。ここでのWladimirは、「nsIChannel.notificationCallbacksに必要なすべての呼び出しを行い、その後要求をキャンセルする」という考えを持っています。バグ286159には、これに関するいくつかの議論があります(2005年にこれをきれいに行う方法はなかったようです)。

これは繰り返し発生する質問なので、 Neckoピアから確認を受け取り、それをMDCに文書化するとよいでしょう。

于 2011-12-11T23:11:50.260 に答える