#javascript #jquery #google-chrome #google-chrome-extension
#javascript #jquery #google-chrome #google-chrome-расширение
Вопрос:
Хорошо, итак, я пытаюсь установить параметры для моего расширения Chrome. Я не знаю, почему это не удается, но вот мой код. Я уверен, что делаю что-то не так.
options.html
<html>
<head><title>PT'd Settings</title></head>
<script type="text/javascript">
// Saves options to localStorage.
function save_options() {
var select = document.getElementById("show");
var option = select.children[select.selectedIndex].value;
localStorage["show"] = option;
// Update status to let user know options were saved.
var status = document.getElementById("status");
status.innerHTML = "Options Saved: " localStorage["show"]; //this shows up perfectly
setTimeout(function() {
status.innerHTML = "";
}, 750);
}
// Restores select box state to saved value from localStorage.
function restore_options() {
var favorite = localStorage["show"];
if (!favorite) {
return;
}
var select = document.getElementById("show");
for (var i = 0; i < select.children.length; i ) {
var child = select.children[i];
if (child.value == favorite) {
child.selected = "true";
break;
}
}
}
</script>
<body onload="restore_options()">
When to show image:
<select id="show">
<option value="load">Show on Load</option>
<option value="click">Show on Click</option>
</select>
<br>
<button onclick="save_options()">Save</button>
<br />
<div id="status"></div>
</body>
</html>
Затем мне нужно отправить эту опцию в мой введенный javascript
background.html
<script type="text/javascript">
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {set: localStorage["show"]}, function(response) {
document.getElementById("box").value = response.answer; //just for testing purposes
});
});
document.write(localStorage["show"]); //just for testing purposes
</script>
<div id="box"></div>
внедренный javascript
...
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
alert("set " request.set); //never even runs
if(request.show == "click") {
//calculate "found" value and send it back
sendResponse({answer: found});
}
});
...
Так что я даже не уверен, что фон.html-страница может считывать localStorage, но я точно знаю, что она неправильно отправляет какие-либо переменные в javascript.
Спасибо
Ответ №1:
Я не уверен, что вполне понимаю, к чему вы клоните, но … возможно, метод «getBackgroundPage» может привести к срабатыванию лампочки?
getBackgroundPage() позволяет вам совместно использовать состояние JS между вашими страницами расширения (что-то вроде модуля, если вы использовали node или RequireJS)… Я использую его в своих popup.htm чтобы захватить и отобразить любые данные моего фона.htm собрал данные. Из предыстории.htm Я оповещаю пользователя с помощью значка расширения и десктопных уведомлений.
Надеюсь, это поможет!
Ответ №2:
Я понял это!
Просто нужно было добавить разрешения в манифест
"permissions": ["tabs"]
Документация Google Chrome довольно слабая.
Комментарии:
1. Если это не дает вам необходимой информации, мы должны улучшить ее. Что насчет документации было запутанным или отсутствовало? Пожалуйста, исправьте ошибки в файлах (в документации или во всем остальном) через new.crbug.com
2. Это было четыре года назад. И документация для расширений Chrome все еще очень слаба.