Я пытаюсь написать расширение Chrome с некоторой базовой связью между сценарием контента и фоновой страницей.Сообщения внутри расширения Chrome в ClojureScript
В JavaScript я бы зарегистрировать слушателей в обоих содержание и фоновых страниц, например, в качестве фона страницы:
chrome.browserAction.onClicked.addListener(function(tab) {
// Send a message to the active tab
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var activeTab = tabs[0];
chrome.tabs.sendMessage(activeTab.id, {"message": "clicked_browser_action"});
});
});
(взяты из this tutorial).
Другой пример, который работает в Javascript:
// content.js
chrome.runtime.sendMessage({screenShot: true}, function(response) {
console.log("response: " + response);
});
// background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
alert('message received!');
console.log("request: " + request);
if (request.screenShot) {
// do something
}
});
Как я могу перевести вышеприведенный код ClojureScript?
Моя первая попытка состояла в том, чтобы создать проект на основе шаблона lein-chrome-extension и использовать Khroma's runtime/connect
методы, основанные на ядре-асинхронном режиме. Но я не получаю надлежащую связь между сценами content.cljs
и background.cljs
. В content.cljs
я есть:
(defn init []
(go
(let [bg (runtime/connect)]
(console/log "content script test")
(while true
(>! bg :lol-i-am-a-content-script)
(console/log "Background said: " (<! bg))))))
и background.cljs
:
(defn on-connect-listener []
(console/log "on-connect-listener")
(go-loop
[channel (runtime/on-connect)]
(let [content (<! channel)]
(console/log "Content script said: " (<! content))
(>! content :fml-i-am-the-background-script)
(recur channel))))
(defn инициализации [] (на Connect-слушателя))
В консоли Chrome я получаю только «Фон сказал : fml-i-am-the-background-script ", поэтому только сообщения, отправленные фоном на страницу содержимого, но не наоборот (я бы ожидал" Content script сказал: lol-i-am-a-content-script " также).
Скорее всего, я делаю некоторые очевидные ошибки. Кто-то может помочь?
Спасибо!
Можете ли вы показать какие-либо попытки и как они потерпят неудачу? – Xan
@Xan - расширен мой первоначальный вопрос. Благодаря! – siphiuel