2016-10-01 6 views
0

Я только знакомлюсь с JavaScript и пытаюсь изменить сценарий в учебнике MDN, Your First WebExtensionзапускать различные сценарии в content_scripts основанного на «спичках»

Я пытаюсь нарисовать красную или синюю рамку вокруг веб-страницу в зависимости от того, является ли она http: // или https: //. Однако будет запущен только один скрипт.

manifest.json это:

{ 
 

 
    "manifest_version": 2, 
 
    "name": "HTTPS Detect", 
 
    "version": "1.0", 
 

 
    "description": "Draws a blue border around HTTPS protected websites. Non-HTTPS sites are given a red border, indicating they do not provide encryption.", 
 

 
    "icons": { 
 
    "48": "icons/border-48.png" 
 
    }, 
 

 
    "content_scripts": [ 
 
    { 
 
\t 
 
     "matches": ["https://*/*"], 
 
     "js": ["httpsdetect.js"], 
 
     "matches": ["http://*/*"], 
 
     "js": ["nohttps.js"] 
 
     
 
\t } 
 
\t 
 
\t ] 
 
    
 
}

httpsdetect.js выглядит следующим образом:

document.body.style.border = "5px solid blue";

И nohttps.js является :

document.body.style.border = "5px solid red";

ответ

1

content_scripts ключ представляет собой массив объектов (каждый из которых содержит обязательный matches ключ), а не только один объект с несколькими копиями одних и тех же ключей. Как у вас есть, у вас есть два matches и два ключа js внутри одного и того же объекта. Это интерпретируется как ключ позже в файле, переопределяющий предыдущий (ы).

Для каждого matches это должен быть другой объект в массиве. Ваш manifest.json может выглядеть следующим образом:

manifest.json:

{ 

    "manifest_version": 2, 
    "name": "HTTPS Detect", 
    "version": "1.0", 

    "description": "Draws a blue border around HTTPS protected websites. Non-HTTPS sites are given a red border, indicating they do not provide encryption.", 

    "icons": { 
    "48": "icons/border-48.png" 
    }, 

    "content_scripts": [ 
    { 
     "matches": ["https://*/*"], 
     "js": ["httpsdetect.js"] 
    }, 
    { 
     "matches": ["http://*/*"], 
     "js": ["nohttps.js"] 
    } 
    ] 
} 

С другой стороны, учитывая, что вы загружаете только один файл, вы можете загрузить файл тот же JavaScript в обоих http и https страниц и изменить то, что вы делаете, на основе URL-адреса, соответствующего http или https. Если бы это было так, что некоторый код был разделен между двумя сценариями, это могло бы быть более эффективным (или вы могли бы иметь общий код в файле, который загружается в оба при загрузке отдельного файла с не разделяемым кодом в каждый). В этом случае вы можете использовать либо один match pattern, который соответствует обоим, либо множественным шаблонам соответствия в массиве matches.