Ошибка Content-Security-Policy в создании расширений Google Chrome

Я делаю расширение Chrome, которое будет открывать все ссылки на странице в новых вкладках.

Вот мои файлы кода:

manifest.json

{
  "name": "A browser action which changes its icon when clicked.",
  "version": "1.1",
    "permissions": [
    "tabs", "<all_urls>"
  ],
 "browser_action": {     
    "default_title": "links",      // optional; shown in tooltip
    "default_popup": "popup.html"        // optional
  },
 "content_scripts": [
    {
    "matches": [ "<all_urls>" ],
      "js": ["background.js"]
    }
  ],
  "manifest_version": 2
}

popup.html

<!doctype html>
<html>
  <head>
    <title>My Awesome Popup!</title>
    <script>
function getPageandSelectedTextIndex() 
  { 
    chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function (response) 
    { 
        console.log(response.farewell); 
    }); 
   }); 
        } 
chrome.browserAction.onClicked.addListener(function(tab) { 
        getPageandSelectedTextIndex(); 
});
         </script>
  </head>
  <body>
    <button onclick="getPageandSelectedTextIndex()">
      </button>
  </body>
</html>

background.js

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
    updateIcon();  

});
function updateIcon() {
  var allLinks = document.links;
  for (var i=0; i<allLinks.length; i++) {
    alllinks[i].style.backgroundColor='#ffff00';

}
}

Сначала я хотел выделить все ссылки на странице или пометить их каким-либо образом; но я получаю сообщение об ошибке "Отказ от выполнения встроенного сценария из-за Content-Security-Policy".

Когда я нажимаю кнопку внутри всплывающего окна, я получаю эту ошибку:Refused to execute inline event handler because of Content-Security-Policy.

Пожалуйста, помогите мне исправить эти ошибки, чтобы я мог открыть все ссылки в новых вкладках, используя мое расширение Chrome.

Ответы на вопрос(1)

Решение Вопроса

"manifest_version": 2 в том, чтоПолитика безопасности контента включен по умолчанию. И разработчики Chrome решили быть строгими и всегда запрещать встроенный код JavaScript - только код, размещенный во внешнем файле JavaScript, может выполняться (для предотвращенияУязвимости межсайтового скриптинга в расширениях). Так что вместо определенияgetPageandSelectedTextIndex() функция вpopup.html Вы должны положить его вpopup.js файл и включить его вpopup.html:

<script type="text/javascript" src="popup.js"></script>

А также<button onclick="getPageandSelectedTextIndex()"> также должен быть изменен,onclick Атрибут также является встроенным скриптом. Вместо этого вы должны назначить атрибут ID:<button id="button">, Затем вpopup.js Вы можете прикрепить обработчик событий к этой кнопке:

window.addEventListener("load", function()
{
  document.getElementById("button")
          .addEventListener("click", getPageandSelectedTextIndex, false);
}, false);
 15 сент. 2012 г., 08:22
Это так глупо. Кто придумал эту идею ?! Теперь я должен изменить все мои встроенные клики и поместить их во внешний файл js. И у меня есть куча файлов, включая их.
 Saad15 июн. 2012 г., 09:01
к спасибо .. я попробую
 15 сент. 2012 г., 14:24
@Derek: С точки зрения безопасности это гораздо лучший подход, возникает много проблем с безопасностью, потому что люди недостаточно осторожны сinnerHTML и тому подобное. Несмотря на это, кажется, что Chrome несколько ослабил требования к контентной политике в текущих сборках Canary,unsafe-inline теперь может быть поддержано.
 15 июн. 2012 г., 08:46
Просто бей меня к этому. Идеальный ответ и это именно то, что вам нужно сделать.
 21 сент. 2012 г., 15:11
@wladimir - надеюсь, они ослабят политику в будущем!

Ваш ответ на вопрос