Я пытаюсь заставить всплывающее/всплывающее меню показывать пользователю другой контент на основе текущего URL-адреса страницы, но не могу установить соединение. Я читал, что только background.html имеет доступ к URL-адресам текущих вкладок в структуре Chrome, поэтому я пытаюсь заставить его сообщить моему контент-скрипту и моему popup.js это через передача сообщений -- background.html получит сообщение и включит в ответ нужную информацию. Popup должен иметь возможность использовать getBackgroundPage(), но сценарии ввода контента не разрешены, поэтому я хотел бы использовать обмен сообщениями для обоих и иметь общее решение.
Итак... консольные сообщения о неудачных соединениях скрыты в каком-то случайном коде реализации, который я даже не могу просмотреть, а именно: разное_bindings:236 или разное_bindings:235, в зависимости от аргументов к кал. Попытка просмотреть, где мы попали, приводит меня к следующему:
Веб-страница по адресу chrome-devtools://devtools/miscellaneous_bindings может быть временно недоступна или навсегда перемещена на новый веб-адрес.
Я убежден, что делаю что-то глупое, или моя система испорчена, но я не могу понять, что именно. Большинство примеров и вопросов, которые я видел, либо требуют функциональности канала бета-релиза, либо используют манифесты версии 1.0, используют устаревшие функции (вопросы, например, 2011 года), либо не имеют принятых ответов. Я использую Chrome 24.0.1312.40 м и отключил другие расширения.
Вот как мы устроены...
всплывающее окно.html
<!doctype html>
<html>
<head>
<title>Working title popup</title>
<script src="popup.js">
// nothing allowed in here
</script>
</head>
<body>
<form>
<fieldset>
<button>Demo</button>
<!--^ push to try again to get response string from background -->
</fieldset>
</form>
</body>
</html>
popup.js:
asky();
function asky(){
catchersMit=null;
console.log("Going to get info.");
// Below causing Port error:
//"Could not establish connection. Receiving end does not exist.":
chrome.extension.sendMessage({msg:"need some info"} //arg1
,function(response){ //arg2
alert(reponse.msg);
//^ yields undefined in alert window
catchersMit=response;}
);
//_*_ catchersMit still appears undefined out here.
}
background.html:
<!doctype html>
<html><head><script type="text/javascript">
chrome.extension.onMessage.addListener(
function(message,sender,sendResponse){
sendResponse( {msg: "info you wanted"} );
} // anonymous (1st parameter) function OUT
); // onRequest listener OUT
</script></head><body></body></html>
manifest.json:
{
"name": "Extension Working Title",
"version": "1.0",
"manifest_version": 2,
"description": "Coolest functionality.",
"browser_action": {
"default_icon": "lnr_icon.png",
"default_popup": "popup.html"
},
"permissions": [ "tabs","http://*/*" ],
"background": { "page": "background.html" }
}
Прямо сейчас я просто работаю с popup.js, так как мне легче отлаживать, но решение этой проблемы не должно отличаться между этим и контент-скриптом, если я не ошибаюсь.
I've read that only background.html has access to current-tabs' URLs in the Chrome framework
, неверное предположение. API chrome.tabs(), вызываемый на всех страницах расширения, дает ожидаемые результаты. - person Sudarshan   schedule 15.12.2012chrome.extension.onMessage
. - person Rob W   schedule 15.12.2012<head><script>/*code*/</script>
в popup.html вместо использования<script src="_pathToSrc_">
, но на background.html таких уведомлений нет. Тогда есть ли просто отсутствие правоприменения? 2. В background.html у меня былоchrome.extension.onMessage.addListener(//...
нужно ли было что-то еще там для завершения привязки? - person dooozies   schedule 16.12.2012