2013-06-24 1 views
3

Я получаю эту ошибку при попытке отправить сообщение из всплывающего окна в мой текст. То, что я пытаюсь сделать, - получить документ текущей вкладки из моего content.js и отправить его во всплывающее окно. Как я могу исправить этот erro?Ошибка порта Chrome Extention: не удалось установить соединение. Конец приема не существует

{ 
    "manifest_version": 2, 
    "name": "Chrome Snapshot", 
    "description": "Save images and screenshots of sites to Dropbox.", 
    "version": "1.0", 
    "permissions": [ 
    "<all_urls>", 
    "tabs" 
    ], 
    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "html/popup.html" 
    }, 
    "background": { 
    "scripts": [ 
     "vendor/dropbox.min.js", 
     "vendor/jquery-2.0.2.min.js" 
    ], 
    "persistant": false 
    }, 
    "content_scripts" : [{ 
    "all_frames": true, 
    "matches" : ["*://*/*"], 
    "js" : ["js/content.js"], 
    "run_at": "document_end" 
    }] 
} 

JS/popup.js

chrome.runtime.sendMessage({message: 'hi'}, function(response) { 
    console.log(response); 
}); 

JS/content.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 
    console.log('message', message); 
    sendResponse({farewell: 'goodbye'}); 
}); 

Редактировать # 1 все еще получаю ту же ошибку Port error: Could not establish connection. Receiving end does not exist. miscellaneous_bindings:235 chromeHidden.Port.dispatchOnDisconnect

фиксированной mispelling «настойчивый 'in manifest
обновляемые JS/popup.js

chrome.tabs.query({'active': true,'currentWindow':true}, function(tab){ 
    console.log('from tab', tab[0]); 
    chrome.tabs.sendMessage(tab[0].id, {message: 'hi'}, function(response){ 
     console.log(JSON.stringify(response)); 
    }); 
    }); 

ответ

3

Вы должны были бы использовать chrome.tabs.sendMessage для отправки сообщений скрипта содержимого. Из chrome.runtime.sendMessage спецификации на сайте разработчика в Chrome:

Note that extensions cannot send messages to content scripts using this method. To send messages to content scripts, use tabs.sendMessage.

Если это не является хорошим вариантом для вас, вы могли бы иметь каждый сценарий контента открыть порт для фоновой страницы (которые, вероятно, должны были бы быть стойкими) и то ваша всплывающая страница отправит сообщение на вашу фоновое изображение, которое передаст сообщение через каждый из портов во все сценарии содержимого, чтобы сообщить им отправить сообщение на всплывающую страницу. (Используйте chrome.runtime.connect.)

Кроме того, в файле манифеста вы ошибочно написали «постоянный». Я не хочу, чтобы вам приходилось копать код за полчаса, прежде чем вы узнаете, что это вызывает проблемы.