0

サード パーティのページに CSS を挿入する方法が適切に機能していないように思われることを指摘しました。

関連する manifest.json 部分:

  "content_scripts": [
    {
      "matches": ["*://*.youtube.com/watch?v*"],
      "css": ["css/youTubeInject.css"],       
      "all_frames": true,
      "js": ["js/thirdParty/underscore.js", "js/thirdParty/jquery.js", "js/youTubeInject.js"]
    }   
  ]

ここで、YouTube 正規表現に一致するページに CSS と JavaScript を挿入することを宣言します。

私の JavaScript はすべて正常に挿入されます。私のCSSはまったく挿入されていません。ファイルの場所と名前をトリプルチェックしました。

youTubeInject.js の先頭には以下が含まれます。

$(function () {

    var style = document.createElement('link');
    style.rel = 'stylesheet';
    style.type = 'text/css';
    style.href = chrome.extension.getURL('css/youTubeInject.css');
    document.head.appendChild(style);

これにより、CSS が正しく読み込まれ、問題の有効な回避策になります。

この問題について誰か提案や追跡できるバグはありますか? ありがたいです!

4

1 に答える 1

3

Chrome は、マニフェスト ファイルで宣言された CSS ファイルを適用する必要があるかどうかを確認するときに、クエリ文字列とロケーション フラグメントを無視しているようです。

http://www.youtube.com/watch?v=VIDEOIDとして見られ
http://www.youtube.com/watchます。

一致パターンにクエリ文字列の一部が含まれているため、パターンがまったく一致しません。

現在、「一致」の動作には一貫性がありません。

ドキュメンテーション
    パターン : https://*.google.com/foo*bar
    機能: マッチ (...) パスは /foo で始まり、bar で終わります
マニフェストファイルの「js」
    パターンが scheme://host/path?querystring に一致するかどうかを確認します
    例:https://google.com/foo?bar
    非例: https://google.com/foobar?
マニフェスト ファイルの「css」
    パターンがスキームに一致するかどうかを確認します://host/path
    例: https://google.com/foobar?thisisignored
    非例: https://google.com/foo?bar
いずれの場合も、ロケーション フラグメント (別名ロケーション ハッシュ) は無視されます。

このバグは 2 年以上前に報告されましたが、追いつきませんでした:

おそらく関連している別のバグがあり、これにはより多くのフォロワーがいます:

于 2013-07-03T23:28:11.617 に答える