Я начал с chrome продлений на три дня go, и мне это очень нравится. Я столкнулся с проблемой: я минимизировал скрипт, который воспроизводит мою проблему:
Если я нахожусь на stackoverflow.com, я могу щелкнуть значок, и откроется всплывающее окно с надписью «сработало», если оно отправило сообщение в фоновый скрипт и получил сообщение «работает».
Если я перезапущу браузер, я получаю всплывающее окно с сообщением, что расширения в режиме разработчика могут быть вредными и хочу ли я их деактивировать . Я отклоняю это сообщение, и теперь, когда я нажимаю на расширение, оно не работает, и я получаю следующую ошибку:
Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
Я выяснил, что фоновый сценарий НЕ запущен (я не получать оповещений из фона. js или печатает в фоновом режиме. js консоль). Я полагаю, что расширение и, следовательно, фон. js, вероятно, не удалось запустить из-за chrome, поскольку это расширение в режиме разработчика. Единственный способ снова запустить расширение - обновить sh расширение из chrome: //extensions.
Я пробовал это с постоянным и непостоянным фоновым скриптом, но это не изменилось поведение.
Является ли мой анализ правильным и, следовательно, единственным решением для развертывания скрипта в интернет-магазине, чтобы он работал правильно? Или есть другой способ запустить приложение в режиме разработчика при запуске chrome?
Вот минимальный пример:
manifest. json
{
"name": "BackgroundScript Error",
"version": "0.0.1",
"manifest_version": 2,
"description": "When starting Chrome, background doesn't start, but when refreshing, background starts",
"page_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["declarativeContent", "<all_urls>"],
"background": {
"scripts": ["background.js"],
"persistent": false
}
}
фон. js
chrome.runtime.onInstalled.addListener(function() {
console.log('Background script is running');
alert("Background is running");
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostEquals: 'stackoverflow.com'},
})],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
console.log('setting up connection to popup');
chrome.runtime.onConnect.addListener(connected);
});
chrome.runtime.onMessage.addListener(function(request, sender) {
console.log(request.action);
});
function connected(p) {
console.log("connected to "+p);
p.postMessage({action: 'didSomething', result: 'worked' });
p.onDisconnect.addListener(disconnected);
}
function disconnected(p) {
console.log("disconnected from "+p);
}
всплывающее окно. js
var myPort
function onWindowLoad() {
var message = document.getElementById('message');
myPort = chrome.runtime.connect({name:"port-from-cs"});
myPort.postMessage({request: "doSomething"});
myPort.onMessage.addListener(function(m) {
console.log("In popup script, received message from background script: ");
message.innerHTML = m.result;
});
}
window.onload = onWindowLoad;
всплывающее окно. html
<!DOCTYPE html>
<html style=''>
<head>
<script src='popup.js' ></script>
</head>
<body>
<div id="message">Popup</div>
</body>
</html>
Спасибо!