1

事前にみんなに感謝します-

そのため、私はかなり長い間この問題に取り組んでおり、すべてのオプションを使い果たしました。CSS リクエストをキャンセルする私の現在のアプローチは、nsIWebProgressListener.onStateChange 内の nsIRequest.cancel を使用することです。これはほとんどの場合うまくいきますが、物事が少し遅れている場合を除いて、私がそれらに到達する前にいくつかがすり抜けてロードグループから飛び出します. これは明らかに汚い解決策です。

次のリンクを読んで、nsIRequest が作成される前に css を無効にする方法をよりよく理解しようとしました...サイコロはありません。

https://developer.mozilla.org/en/Document_Loading_-_From_Load_Start_to_Finding_a_Handler https://developer.mozilla.org/en/The_life_of_an_HTML_HTTP_request https://developer.mozilla.org/en/Bird 's_Eye_View_of_the_Mozilla_Framework

プレゼンテーション オブジェクト/インターフェイスを介して css を無効にするにはどうすればよいですか? これは可能ですか?nsIDocShell の内部には、ブラウザーの docshell を介して css を無効にできることを示唆するいくつかの属性があります - allowPlugins、allowJavascript、allowMetaRedirects、allowSubframes、allowImages。

助言がありますか?

ありがとう、

サム

4

3 に答える 3

2

スタイルシートを無効にするメニューオプションは、関数を使用します

setStyleDisabled(true)

したがって、新しいブラウザタブが作成されるたびに、この関数を呼び出すことができます。スタイルシートは引き続きサーバーから要求されますが、適用されません。この関数はそれほど洗練されておらず、nsIRequest、ソースを台無しにしません。

function setStyleDisabled(disabled) {
  getMarkupDocumentViewer().authorStyleDisabled = disabled;
}

Web DeveloperToolbarのソースコードを掘り下げると、「スタイルシートを無効にする」関数がすべてをループし、プロパティを次のようにdocument.styleSheets設定していることに気付きました。disabledtrue

/* if DOM content is loaded */
var sheets = document.styleSheets;
for(var i in sheets){ sheets[i].disabled = true; }

したがって、CSSをページに適用しないことが重要な場合は、上記の解決策のいずれかが機能するはずです。しかし、本当にスタイルシートがサーバーからダウンロードされないようにする必要がある場合nsIRequestは、傍受が唯一の選択肢だと思います。

于 2010-03-26T12:23:16.487 に答える
1

permissions.default.stylesheet を 2 に設定してください。

実際にはパーミッション マネージャーを使用して、ホストごとにスタイルシートをブロックまたは許可できます。

于 2010-04-13T21:33:16.620 に答える
0

残念ながら、allowImages のような単純なフラグはないようです。そのための bugzilla 追加はhttps://bugzilla.mozilla.org/show_bug.cgi?id=340746です。新しい bugzilla 投票機能を使用して投票できるようになりました。自分自身を CC リストに追加して、誰かがそれに取り組んだ場合に通知を受けることもできます。

関連するリクエストとして、基本的な HTML 解析のサポートを提供してほしいというものがあります。残念ながら、これもまだサポートされていませんが、https: //bugzilla.mozilla.org/show_bug.cgi?id=102699 でバグジラに投票/追跡できます。

したがって、@pawalが示唆するように、唯一の実行可能な解決策は、ある種の傍受のようです。これは、インターセプトの基本について説明しているリンクで、少なくともあなた/私たちが始められるhttps://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loadsです。以下にリストするいくつかのオプションをリストします。

これらの最初のいくつかはページ/ドキュメントレベルにあるように見えるので、役に立たないと思います:

  • イベントのロード (addEventListener ロード)
  • Web Progress Listeners (nsIWebProgressListener) - このアプローチを試してみましたが、ページ内のコンテンツではなく、ページ自体に対してのみ呼び出されるようです。
  • ドキュメント ローダー サービス - nsIWebProgressListener のグローバル バージョンなので、同じ問題があると思います (ページ レベルのみ)

それは私がまだ試していない他の2つを残します. それらはグローバルに機能するため、関心のあるブラウザー/ページだけにフィルターする必要があります.

  • HTTP オブザーバー - 動作するようですが、CSS のコールバックを確認する必要があります
  • コンテンツ ポリシー - CSS に対して明示的に呼び出されているため、私にとって最良のオプションのように思えます。いつか試してみたいと思っています :)
于 2011-05-04T16:39:53.093 に答える