chrome extension-manifest версии 2 проблемы с _locales

я пытаюсь обновить свою версию манифеста для своего расширения, но это дало мне эту проблему:

указана локаль по умолчанию, но поддерево _locales отсутствует.

это мой файл manifest.json, может ли кто-нибудь сказать мне, в чем проблема и что я могу сделать?

{
  "name": "Selected Text", 
  "version": "0.1", 
  "manifest_version": 2,
  "description": "Selected Text and some changes", 
  "default_locale":"en", 
  "browser_action": { 
    "default_title": "S. Text", 
    "default_icon": "online.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs", 
    "chrome://favicon/", 
    "http://*/*",  
    "https://*/*" 
  ],
  { 
    "matches": ["http://*/*"], 
    "js": ["selection.js"], 
    "run_at": "document_start", 
    "all_frames": true
  }
}

person elianore    schedule 20.10.2012    source источник


Ответы (4)


Похоже, вам не хватает нужного каталога _locales в корне вашего расширения. Поскольку вы указываете default_locale, вам необходимо указать каталог _locales, внутри которого находятся ваши параметры интернационализации. В вашем случае вам потребуется как минимум папка с названием _locales/en, внутри которой у вас есть файл messages.json, внутри которого вы должны установить свои конкретные параметры (см. здесь для получения дополнительной информации).

person RocketDonkey    schedule 23.10.2012
comment
Спасибо! но когда проблема с версией манифеста решена, мой код перестает работать. у тебя есть идеи? - person elianore; 23.10.2012
comment
@elianore Нет проблем! В расширении вы специально включили параметры интернационализации? Это означает, что вы действительно интернационализировали его, включив различные переводы и т. Д.? Если у вас нет других переводов (или вы не планируете их иметь), вы можете просто удалить параметр default_locale и папку _locales (поскольку наличие одного требует наличия другого), и это должно работать. Если вы хотите интернационализировать, вам необходимо создать хотя бы один messages.json файл (по ссылке), содержащий ваши переводы. - person RocketDonkey; 23.10.2012
comment
хорошо, я удалил их, спасибо за помощь, но мой код больше не работает: если json-файл версии 1, он работает, но в манифесте версии 2 он перестает работать. (код заключается в том, чтобы выбрать слово из текста, и после одного щелчка по этому слову оно будет сохранено в локальном хранилище) - person elianore; 24.10.2012
comment
@elianore Хорошо, давайте это исправим :) Вы просматривали регистратор, чтобы увидеть, какие ошибки выдаются? Я могу предположить две возможные ошибки: 1.) вы используете интернационализацию в своем скрипте (chrome.i18n.getMessage('...')), и он терпит неудачу, потому что не может найти сообщение [это маловероятно, так как он работает с манифестом v1]; или 2.) вы используете встроенные скрипты, которые не разрешены в v2. Есть ли какие-нибудь скрипты внутри вашего файла popup.html? Кроме того, это может быть копирование/вставка, но ваши права доступа "https:///" или `https://*/*? - person RocketDonkey; 24.10.2012
comment
еще раз спасибо! я не использовал интернационализацию в своем скрипте (внутри popup.html нет chrome.i18n.getMessage()) в этом скрипте: › function pasteSelection() { › chrome.tabs.getSelected(null, function(tab) { › chrome.tabs.sendRequest(tab.id, {method: getSelection}, ›function (response) { › var text = document.getElementById('text'); › text.innerHTML = response.data;}); } ); } и это мои разрешения: разрешения: [ tabs, chrome://favicon/, http://*/*, https://*/* ], и ошибки нет, просто код не работает: S - person elianore; 25.10.2012
comment
@elianore Хорошо, я думаю, мы приближаемся. Попробуйте следующее: создайте отдельный файл с именем popup.js, а затем вырежьте приведенный выше код скрипта и вставьте его в новый документ. Затем внутри тега <head> в вашем popup.html добавьте строку <script type="text/javascript" src="popup.js"></script> (убедитесь, что вы удалили весь код фактического скрипта). Это похоже на проблему со встроенным скриптом — в Manifest V2 встроенные скрипты (например, тот, что у вас есть в popup.html) больше не разрешены, поэтому вам нужно поместить скрипт в другой файл. Имеет ли это смысл? - person RocketDonkey; 25.10.2012
comment
это так логично, и я думаю, что, возможно, это проблема, но я попробовал, и код не сработал. я должен поместить что-нибудь еще в файл html или в файл js (теперь у меня есть 2 файла js) - person elianore; 28.10.2012
comment
@elianore Не могли бы вы опубликовать часть своего кода? Возможно, наименьшее количество, которое все еще работает. Таким образом, мы можем взглянуть на реальную проблему и разобраться с ней (что мы и сделаем :) ) - person RocketDonkey; 28.10.2012
comment
спасибо уууу!! файл manifest.json: {имя: выбранный текст, версия: 0.1, manifest_version: 2, описание: выбранный текст и некоторые изменения, browser_action: {default_title: S. Text, default_icon: online.png, default_popup: popup.html}, разрешения : [ вкладки, chrome://favicon/, http://*/*, https://*/* ], content_scripts: [ { соответствует: [http://*/*], js: [selection.js ], run_at: document_start, all_frames: true } ] } - person elianore; 30.10.2012
comment
HTML-файл: ‹html› ‹head› ‹style› body { width: 300px; } текстовая область { ширина: 250 пикселей; высота: 100 пикселей;} ‹/style› ‹script type=text/javascript src=popup.js›‹/script› ‹script src=ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js type=text/javascript›‹/script› ‹ /head› ‹body› ‹textarea id=text› ‹/textarea› ‹button onclick=pasteSelection(); ›Вставить выделение‹/кнопка› ‹/br› ‹кнопка onclick=myFunction()›Вопрос‹/кнопка› ‹кнопка onclick=openC()›openCalais‹/кнопка› ‹кнопка onclick=openRet()›Получить Кале‹/кнопка › - person elianore; 30.10.2012
comment
popuup.js (новый файл, который вы сказали мне создать) function pasteSelection() { chrome.tabs.getSelected(null, function(tab) { chrome.tabs.sendRequest(tab.id, {method: getSelection}, function (ответ) { var text = document.getElementById('text'); text.innerHTML = response.data; }); }); } function myFunction() { chrome.tabs.getSelected(null, function(tab) { chrome.tabs.sendRequest(tab.id, {method: getV}, function (response) { var x= response.data; var name= приглашение(х); }); }); } . . . и еще один файл selection.js - person elianore; 30.10.2012
comment
@elianore Можете ли вы также предоставить файл selection.js? Я собираюсь построить все это со своей стороны и отладить: 0 - person RocketDonkey; 30.10.2012
comment
Хорошо, это часть функции selection.js test() { alert(ok); } function loadXMLString(txt) { if (window.DOMParser) { // FireFox, Opera, Chrome, Safari parser=new DOMParser(); xmlDoc = parser.parseFromString (txt, текст/xml); } else { // Internet Explorer xmlDoc=new ActiveXObject(Microsoft.XMLDOM); xmlDoc.async = ложь; xmlDoc.loadXML(txt); } вернуть xmlDoc; } - person elianore; 30.10.2012
comment
function loadXMLDoc(docURL) { if (window.XMLHttpRequest) { // FireFox, Opera, Chrome, Safari xhttp = new XMLHttpRequest(); } else { // Internet Explorer xhttp = new ActiveXObject(Microsoft.XMLHTTP); } xhttp.open(GET,docURL,false); хhttp.отправить(); вернуть xhttp.responseXML; } function loadDoc(docURL) { if (window.XMLHttpRequest) { // FireFox, Opera, Chrome, Safari xhttp = new XMLHttpRequest(); } - person elianore; 30.10.2012
comment
else { // Internet Explorer xhttp = new ActiveXObject(Microsoft.XMLHTTP); } xhttp.open(GET,docURL,false); xhttp.setRequestHeader(Content-type, text/plain; charset=utf-8);//попытаться указать тип ответа xhttp.send(); вернуть xhttp.responseText; } function displayTranslation(json) { var wordreference = JSON.parse(json); // использовать синтаксический анализатор json2.js по умолчанию (на всякий случай, если объект JSON недоступен) var term = ''; смысл вар = ''; - person elianore; 30.10.2012
comment
/* разбираем ответ JSON */ //здесь тоже код function copyText(request, sender, sendResponse) { var old = this.document.location.href in localStorage //document.write( old +old); var b = this.document.location.href ; //document.write(b +b); var Avalue = localStorage.getItem(b); //document.write(Avalue +Avalue); если (request.method == getSelection){ если (старый==true){ - person elianore; 30.10.2012
comment
sendResponse({данные: window.getSelection().toString()}); json = loadDoc(api.wordreference.com /0.8/2d882/json/enfr/); console.info(json); localStorage.setItem(this.document.location.href, Avalue + _- + window.getSelection().toString()); }else{ sendResponse({data: window.getSelection().toString()}); json = loadDoc(api.wordreference.com /0.8/2d882/json/enfr/); console.info(json); localStorage.setItem(this.document.location.href, window.getSelection().toString()); } } - person elianore; 30.10.2012
comment
else if(request.method == getV){ var sWords = localStorage.getItem(b); var wordArray=sWords.split(_-); var arrLength =wordArray.length; for (i = 0; i ‹ arrLength; i++) { var rand= Math.floor((Math.random()*arrLength)+0); var rand1= Math.floor((Math.random()*arrLength)+0); } var quest = quelle est la traduction en francais du mot: +wordArray[rand] ; var quest1 = quelle est la traduction en francais du mot: +wordArray[rand1] ; sendResponse({данные: квест}); } // иначе если .... иначе.... chrome.extension.onRequest.addListener(copyText); - person elianore; 30.10.2012
comment
@elianore Немного сложно правильно скопировать / вставить все это (вы можете попробовать gist.github.com, если хотите), но я сразу вижу две проблемы: 1.) Вы не указываете полный URL-адрес для пакет jquery. Я бы предложил загрузить его в виде файла и включить в расширение, поместив в манифест. 2.) Вызовы функций, которые у вас есть в вашем popup.html, являются встроенными сценариями, которые не разрешены в манифесте 2. Поэтому вы захотите удалить эти вызовы функций и вместо этого использовать popup.js для назначения этих функций их кнопкам (вы можете использовать jQuery для этого). - person RocketDonkey; 30.10.2012
comment
даже при вызове кнопок в html-файле ‹button onclick=myFunction()› это встроенные скрипты? большое спасибо! - person elianore; 01.11.2012
comment
@elianore Да :) Попробуйте переместить назначение этих вызовов в popup.js и посмотрите, поможет ли это. - person RocketDonkey; 01.11.2012
comment
Ссылка не работает. Не могли бы вы обновить его? - person theknightD2; 19.03.2021

У меня такая же проблема.

Это "default_locate": "en",.

Но потом все равно ошибка. Так что просто оставьте это.

person WlanKabl    schedule 11.05.2021

Пожалуйста, проверьте иерархию файлов. Это должно быть что-то вроде ниже,

- manifest.json
- ???? _locales    ????
    - ???? en 
        - messages.json
    - ???? es
        - messages.json
    - ???? ...
        - messages.json

Ссылка

person Carson    schedule 10.07.2021

default_locale:en,

посмотрите на этот код и подумайте. вы получите решение.

person 2522 89 MD TAREQUL ISLAM    schedule 29.08.2020