9

Я делаю расширение chrome, которое откроет все ссылки на странице на новых вкладках.Ошибка безопасности Content-Security в расширении google 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'; 

} 
} 

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

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

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

ответ

18

Одним из следствий "manifest_version": 2 является то, что Content Security Policy включен по умолчанию. И разработчики Chrome решили быть строгими и всегда запрещают встроенный код JavaScript - только код, размещенный во внешнем файле JavaScript, разрешен (для предотвращения расширения Cross-Site Scripting vulnerabilities в расширениях). Таким образом, вместо определения 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 вы можете прикрепить к этой кнопке обработчик событий:

+0

Просто избили меня до этого. Отличный ответ и именно то, что вам нужно сделать. – Alasdair

+0

k спасибо..и попробуем – Saad

+0

Это так глупо. Кто придумал эту идею ?! Теперь я должен изменить все свои встроенные onclicks и поместить их во внешний файл js. И у меня есть куча файлов, включая их. –

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