2

ページ上のすべてのアンカーをあるドメインから別のドメインに変更するための簡単な Chrome pageAction 拡張機能を作成しようとしていますが、うまく機能していないようで、デバッグに問題があります。

この種の拡張機能を構築する方法を誤解していますか? それとも、API を誤用しているだけですか?

manifest.json :

{
  "name": "theirs2ours",
  "version": "1.0",
  "description": "Changes all 'their' URLs to 'our' URLs.",
  "background_page": "background.html",
  "permissions": [
    "tabs"
  ],
  "page_action": {
    "default_icon": "cookie.png",
    "default_title": "theirs2ours"
  },
  "content_scripts": [
    {
      "matches": ["http://*/*"],
      "js": ["content.js"]
    }
  ]
}

background.html :

<html>
<head>
<script type='text/javascript'>

chrome.tabs.onSelectionChanged.addListener(function(tabId) {
  chrome.pageAction.show(tabId);
});

chrome.tabs.getSelected(null, function(tab) {
  chrome.pageAction.show(tab.id);
});

chrome.pageAction.onClicked.addListener(function(tab) {
    chrome.tabs.sendRequest(tab.id, {}, null);
});

</script>
</head>
<body>
</body>
</html>

content.js :

var transform = function() {
  var theirs = 'http://www.yourdomain.com';
  var ours = 'http://sf.ourdomain.com';
  var anchors = document.getElementsByTagName('a');
  for (var a in anchors) {
    var link = anchors[a];
    var href = link.href;
    if (href.indexOf('/') == 0) link.href = ours + href;
    else if (href.indexOf(theirs) == 0) link.href = href.replace(theirs, ours);
  }
};

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  transform();
});
4

2 に答える 2

3

これは、あなたが望む拡張を行う方法ではないと思います。

まず、ページ アクション ボタンをクリックしたときにアンカーを置き換えたいとします。

あなたが持っているマニフェストは、ページアクションボタンをクリックするかどうかに関係なく、すべてのページにcontent.jsを挿入します。

マニフェストからcontent_scriptsフィールドを削除し、手動でcontent.jsを挿入することをお勧めします。

chrome.tabs.executeScript(tabId, {file:'content.js'})

これは、ページ アクションのクリック リスナーで行う必要があります。

ところで、そのリスナーではコンテンツ スクリプトにリクエストを送信していますが、そのようなリクエスト メッセージをリッスンするリスナーがありません。この拡張機能では、 senRequestを使用する必要はありません。

于 2012-03-09T03:54:59.930 に答える
2

これらのページでコンテンツ スクリプトを実行する許可を要求していません。コンテンツ スクリプトの一致によって、スクリプトが実行されるページが決まりますが、これらのページにスクリプトを挿入する許可をリクエストする必要があります。

"permissions": [
  "tabs",
  "http://*/*"
]
于 2012-03-09T08:34:34.020 に答える