2012-03-09 7 views
2

페이지의 모든 앵커를 한 도메인에서 다른 도메인으로 변경하는 간단한 Chrome pageAction 확장을 작성하려고합니다.하지만 제대로 작동하지 않는 것 같습니다. 디버깅하는 데 문제가 있습니다.간단한 크롬 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

나는이 아니라고 생각 당신이 원하는 연장을하는 방법.

우선 페이지 동작 버튼을 클릭 할 때 앵커를 교체한다고 가정합니다.

페이지 동작 버튼을 클릭했는지 여부와 상관없이 모든 페이지에 콘텐츠 .js을 삽입 한 매니페스트가 삽입됩니다.

은 당신이 당신은 페이지 액션의 클릭 리스너에서이 작업을 수행해야

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

로, 매니페스트에서 content_scripts에게 필드를 제거하고 수동으로 content.js를 주입 좋습니다.

그런데 청취자는 콘텐츠 스크립트에 요청을 보내고 있지만 요청 메시지를 듣는 청취자는 없습니다. 이 확장 프로그램에서는 senRequest을 사용할 필요가 없습니다.

+1

좋은 조언. 저는 일반적으로 API에 대해 좀 더 친숙해질 필요가 있다고 가정합니다. –

관련 문제