2016-12-27 2 views
0

Я пытаюсь создать страницу параметров для моего самого первого расширения. Я совершенно новый для кодирования, поэтому я уверен, что сделал простой faux-pas. К сожалению, у меня возникли проблемы с некоторыми базовыми функциями, которые я работал в моем базовом расширении в течение некоторого времени и без проблем. Я рассмотрел синтаксис и искал всюду, о чем я могу думать, почему это не работает И не дает ошибки в том, почему он терпит неудачу. Я воспроизвел поведение в jsfiddle. Будем очень благодарны любой помощи..click() на кнопке, не работающей (без ошибок)

--HTML--

<title>Options for My Extension</title> 

<script src="jquery-3.1.1.js"></script> 
<body> 
<h1>Toggle Menu to "Default = Out"?</h1> 
<select id="Menu_Hide"> 
<option value="No">No</option> 
<option value="Yes">Yes</option> 
</select> 
<br /> 
<button id="Save">Save</button> 
<br /> 
<button id="Reset">Reset</button> 
</body> 

--JS--

function save_data(){ 
    var ob = document.getElementById("Menu_Hide"); 
    var txt = ob.children[ob.selectIndex].value; 
    localStorage["Menu_Hide"] = txt; 
} 

function load_data(){ 
    console.log("This loads just fine!") 
    var data = localStorage["Menu_Hide"]; 
    if (!data){ 
     return; 
    } 
var select = document.getElementById("Menu_Hide"); 
var found = false; 
for (var i = 0; i < select.children.length && !found; i++){ 
    var child = select.children[i]; 
    if (child.value == data) { 
     child.selected = "true"; 
     found = true; 
    } 
}  
} 

window.onLoad = load_data(); 

$('#Save').click(function() { 
    alert('Settings Saved!'); 
    save_data(); 
}) 

--manifest.json-- (обновление)

{ 
    "manifest_version": 2, 
    "name": "My first attempt at being useful.", 
    "description": "This extension will add additional functionality to some pages.", 
    "version": "1.5", 
    "options_page": "options.html", 
    "content_scripts": [{ 
    "js": ["start.js"], 
    "matches": 
     [ 
     "https://<url1>" 
     "https://<url2>", 

     ] 
    }], 
"web_accessible_resources": ["run.js"], 
    "permissions": [ 
    "activeTab", 
    "tabs", 
] 
} 
+0

Typo: это ['selectedIndex'] (https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedIndex), а не' selectIndex'. Кроме того, скрипка дает ошибки, первая из которых - это jQuery, которая не определяется, так как вы не указали ее правильно для скрипта, а затем ошибку 'Can not read property 'значение undefined для строки, в которой вы использовали неправильное свойство name –

+1

'window.onLoad = load_data();' должно быть 'window.onLoad = load_data;'. Вы вызываете функцию немедленно, вместо того, чтобы назначать ссылку на функцию – charlietfl

+0

Итак, после того, как вы установили скрипку с приведенными выше рекомендациями, она фактически работает на скрипке. Однако при загрузке этот точный код в расширении Chrome выходит из строя как «options_page». Кто-нибудь имеет представление о том, почему это провалится? В консоли ничего не записывается. Ничего не могу понять, почему функция save_data не срабатывает при нажатии кнопки «Сохранить». – technicallynick

ответ

0

Я не могу найти любая подтверждающая документация, но я обнаружил, что функция «.click()» НЕ работает для страницы «Параметры» в расширении. Однако, вместо того, чтобы использовать отдельную страницу в целом, вы можете использовать действие браузера «default_popup», и здесь работают функции щелчка (а также другие прослушиватели событий).

Я надеюсь, что это поможет кому-то в будущем!

Смежные вопросы