3

Chrome、Firefox、Safari用のかなり複雑なブラウザ拡張機能を書いています。

ChromeとFirefoxでは、URLマッチングに基づいて、どのコンテンツスクリプトをどのサイトに挿入するかを指定できます。

Safariは、そのような(きめ細かい)機能を提供していないようです。すべてのサイトで1つのホワイト/ブラックリストしか許可されていません。

これを行う方法はありますか?そうでない場合、Javascriptファイルを条件付きでロードするにはどうすればよいですか?(私はそれらをDOMに追加できないことを念頭に置いて)。

yepnopeを試しましたが、DOMに追加されます。

注:実際のファイルは基本的に拡張機能間で複製されるライブラリコードであるため、ロジックを追加したくありません。

4

2 に答える 2

9

safari.extension.addContentScriptプログラムでスクリプトをsafari.extension.addContentScriptFromURL挿入できます。これらのメソッドは、グローバルページ、拡張機能ポップオーバー、または拡張機能バーのいずれかで使用できます。どちらの方法でも、引数は次のとおりです。

  • 挿入するスクリプト(それぞれ文字列またはURLとして)、
  • スクリプトを挿入するページに一致するURLパターンのホワイトリスト、
  • ページを除外するブラックリスト、および
  • スクリプトを終了スクリプトとして(または開始スクリプトとして)挿入するかどうかのブール値。

詳細については、Safari拡張機能リファレンスのこのページを参照してください。

ホワイトリストとブラックリストはどちらも、UNIXワイルドカードに類似している(ただし同一ではない)URLパターン形式を使用しており、通常の表現ほど強力ではないことに注意してください。このパターン形式については、このページの下部で説明しています。

于 2012-04-28T23:00:16.247 に答える
4

受け入れられた答えは正しいですが、ChromeやFirefoxのように、現在開いているタブにプログラムでスクリプトを挿入することはできないことに注意することが重要です。SafariExtensionクラスリファレンスには次のように記載されています。

スタイルシートとスクリプトの追加と削除。コンテンツスタイルシートの追加または削除は、ページにすぐに適用されます。コンテンツスクリプトの追加または削除は、その時点以降に開かれた、または再ロードされたページにのみ適用されます。Info.plistファイルにあるスタイルシートまたはスクリプトを削除すると、現在のブラウザセッションからのみ削除されます。

この制限があるため、代わりにScripts属性に依存する方が簡単な場合がよくあります。Info.plist

于 2014-03-07T16:56:00.363 に答える