2012-03-09 25 views
2

ページ上のすべてのアンカーをあるドメインから別のドメインに変更するための簡単なChromeのpageAction拡張機能を作成しようとしていますが、動作させることはできません。デバッグに問題があります。些細な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(); 
}); 
+0

注実証されたAPIは、名前と署名によって変更されている - あなたが必要と同様の効果を得るために、今日[ 'chrome.tabs.onActivated'](http://developer.chrome.com/extensions/tabs。 html#event-onActivated)と['chrome.tabs.getCurrent'](http://developer.chrome.com/extensions/tabs.html#method-getCurrent)を参照してください。 – Ronny

答えて

2

これらのページでコンテンツスクリプトを実行するには、requesting permissionではありません。コンテンツスクリプトのマッチにより、実行されるページが決まりますが、スクリプトをこれらのページに挿入する権限を依頼する必要があります。

"permissions": [ 
    "tabs", 
    "http://*/*" 
] 
+0

その場で右。ありがとう! –

3

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

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

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

私はあなたのマニフェストからcontent_scriptsフィールドを削除し、手動でcontent.jsを注入し、

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

であなたはページアクションのクリックリスナーでこれを行う必要があります示唆しています。

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

+1

良いアドバイス。私は、一般的には、APIにはもう少し精通している必要があると思います。 –

関連する問題