17

मैं क्रोम एक्सटेंशन बना रहा हूं, हालांकि मुझे ऑनक्लिक() ईवेंट को आग लगाने का प्रयास करते समय मुझे निम्न त्रुटि मिलती है।क्रोम-एक्सटेंशन इनलाइन जावास्क्रिप्ट आमंत्रण त्रुटि को कैसे ठीक करें?

Refused to load the script 'https://apis.google.com/js/client.js?onload=handleClientLoad' because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:" 

और

Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution. 

यह मेरा manifest.json है:

{ 
    "manifest_version": 2, 

    "name": "SECURE", 
    "description": "this extension offers secure communication for GMAIL  users", 
    "version": "1.0", 

"browser_action": { 
"default_icon": "resources/icon16.png", 
"default_popup": "popup.html", 
"default_title": "Click here!" 


}, 

"background":{ 
    "scripts":["background.js"] 
}, 

"content_scripts": [ 
    { 
    "matches": ["http://*/*", "https://*/*"], 
    "js":["myscript.js"], 
    "run_at": "document_end" 
    } 
    ], 
"permissions": ["identity", "https://accounts.google.com/*", "https://www.googleapis.com/*"], 

"oauth2": { 
    "client_id": "975410329966.apps.googleusercontent.com", 
"scopes": [ 
    "<all urls>", 
    "https://www.googleapis.com/auth/drive", 
    "https://mail.google.com/", 
    "https://www.googleapis.com/auth/gmail.login", 
    "https://www.googleapis.com/auth/gmail.compose", 
    "https://www.googleapis.com/auth/gmail.readonly", 
    "https://www.googleapis.com/auth/gmail.send" 
    ], 

"content_security_policy":"script-src 'self' 'unsafe-inline' 'unsafe eval' https://apis.google.com/js/client.js?; object-src 'self'" 


} 
} 

इस त्रुटि को ठीक करने की दिशा में किसी भी मदद की बहुत सराहना की जाएगी।

+2

की संभावित डुप्लिकेट [Chrome एक्सटेंशन पॉपअप काम नहीं कर रहा, घटनाओं क्लिक संभाला नहीं कर रहे हैं] (https://stackoverflow.com/questions/17601615/the-chrome-extension-popup-is-not-working- क्लिक-घटनाओं-नहीं-नियंत्रित किया जाता है) – Makyen

उत्तर

8

डिफ़ॉल्ट रूप से Content Security Policy, इनलाइन स्क्रिप्ट लोड नहीं की जाएंगी और केवल स्थानीय स्क्रिप्ट लोड की जा सकती है। आप डिफ़ॉल्ट नीति को आराम कर सकते हैं:

  1. इनलाइन स्क्रिप्ट। Official Guide पर एक नज़र डालें, पॉलिसी में स्रोत कोड के बेस 64-एन्कोडेड हैश को निर्दिष्ट करके इनलाइन स्क्रिप्ट को श्वेतसूचीबद्ध किया जा सकता है। उदाहरण के लिए Hash usage for elements देखें।

    लेकिन मेरा मानना ​​है कि एक बेहतर तरीका इस तर्क को एक अलग लिपि में निकालेगा और इनलाइन स्क्रिप्ट का उपयोग नहीं करेगा।

  2. रिमोट स्क्रिप्ट। आप manifest.json

    "content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'" 
    

    इसके अलावा में निम्न अनुभाग द्वारा स्क्रिप्ट संसाधन https://apis.google.com/js/client.js?onload=handleClientLoad श्वेत सूची में डालने सकता है, मेरा मानना ​​है कि एक बेहतर तरीका दूरस्थ client.js डाउनलोड हो सकता है और एक स्थानीय स्क्रिप्ट के रूप में यह शामिल है।

कृपया Inline Script के वर्णन के अनुसार बारे में पता होना, unsafe-inline अब काम नहीं करता।

क्रोम 45 तक, इनलाइन जावास्क्रिप्ट को निष्पादित करने के खिलाफ प्रतिबंध को आराम देने के लिए कोई तंत्र नहीं था। विशेष रूप से, एक स्क्रिप्ट नीति को एक्ट करना जिसमें 'असुरक्षित इनलाइन' का कोई प्रभाव नहीं होगा

संबंधित मुद्दे