1

みなさん、良い一日を!Chromeの拡張機能を初めて作成することにしました。このアイデアはありますが、開始方法がわかりません。あなたが私を正しい方向に向けてくれることを願っています。

特定のURLが開かれているかどうかを検出してから、そのクエリ文字列の1つの値を変更したいと思います。例えば:

  1. ページを開きますhttp://downloadpage.url/?page=info&id=123456
  2. 拡張機能はこれを検出し、クエリ文字列「page」の値を「info」から「download」に変更し、新しい値でページを開き続けます。

どうすればよいですか?必要な権限はWebRequestとWebRequestBlockingだと思いますが、よくわかりません。ここで手順を試しました:URLが開いているかどうかを検出します-Chrome拡張機能ですが、マニフェストのバージョン(Chromeのバージョンは21.0.1180.89)を考慮してbackground_pageをbackgroundに変更しても機能しないようです。私はそこでコードを変更できることを望んでいましたが、残念ながらそれは私にとってはうまくいきませんでした、そして今私は道に迷っています。

4

1 に答える 1

1

上記のコメントにあるRobWのリンクをたどって(Robに感謝します)、私は自分が望むものに従って機能するコードを思いつきました。まず、目的のURLにいるときにコンテンツスクリプトを実行するために、マニフェストに次を追加しました。

  "content_scripts": [
     {
       "matches": [
          "http://downloadpage.url/*"
       ],
       "js": ["background.js"]
     }
  ]

明らかに、URLは偽物です...

次に、クエリ文字列を簡単に取得できる次の関数を使用して、background.jsというファイルを作成しました。元のコードはここからのもので、他のリンクや文字列で再利用できるように少し変更しました。

function getQueryString(URL) {
  if (!URL) {
    URL = location.search;
  }
  else
  {
    var a = document.createElement('a');
    a.href = URL;
    URL = a.search;
  }

  var result = {}, queryString = URL.substring(1),
      re = /([^&=]+)=([^&]*)/g, m;

  while (m = re.exec(queryString)) {
    result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }

  return result;
}

最後に、変更されたクエリ文字列を使用してリダイレクトを行うコードは次のとおりです。

if (page == "info")
{
  var ID = getQueryString()["id"];

  location.replace('http://downloadpage.url/?page=download&id='+ID;);
}

私はまだより良い、よりエレガントなソリューションを求めていますが、これは私がやりたいことを実行します。もっと良いアイデアがあれば教えてください。乾杯!

于 2012-09-24T00:06:25.380 に答える