2016-01-08 3 views
0

Я создал расширение, и я пытаюсь определить, существует ли это расширение в одном из моих виртуальных хостов.Могу ли я определить, существует ли расширение из веб-страницы?

Вот код для обнаружения, если расширение существует или нет: (script.js)

var detect = function(base, if_installed, if_not_installed) { 
    var s = document.createElement('script'); 
    s.onerror = if_not_installed; 
    s.onload = if_installed; 
    document.body.appendChild(s); 
    s.src = base + '/manifest.json'; 
}; 
detect('chrome-extension://' + "myExtensionId", function() {alert('boom!');}, 
    function() {alert("buf. nothin")}); 

Когда я открываю виртуальные хосты в браузере он предупреждает меня: ЬиЕ. Ничего и в журнале консоли появляется эта ошибка:

  • Лишить груз хромированного расширения: //myExtensionId/manifest.json. Ресурсы должны быть перечислены в проявленном ключе web_accessible_resources для того, чтобы быть загружены страницами за пределами расширения

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

Таким образом, можно определить, существует ли расширение в пределах расширения, , но можно определить, существует ли расширение из веб-страницы?

+0

сообщение об ошибке четко объясняет, что [проблема] (https://developer.chrome.com/extensions/manifest/web_accessible_resources). Но я рекомендую использовать подход в ответе @ Daniel @ – minj

+0

, это сообщение об ошибке сохранялось даже в этом файле в файле manifest.json: '' web_accessible_resources ": [ "/* " ]'. –

+0

Я не думаю, что это действительный глобус. Попробуйте '[" * .json "," scripts/*. Js "]' или аналогичный – minj

ответ

3

Если у вас есть страница, вы можете отправить сообщение на расширение. Если он отвечает, он устанавливается. Документы: https://developer.chrome.com/extensions/messaging#external-webpage

manifest.json

"externally_connectable": { 
    "matches": ["https://example.com/*"] 
} 

page.js

var id = "randomlettersfromwebstoreurl" 

chrome.runtime.sendMessage(id, "installed?", function(response) { 
if(response) { 
    // The extension is installed 
} else { 
    // The extension is not installed or disabled 
} }) 

extension.js

chrome.runtime.onMessageExternal.addListener(function(request, sender, respond) { 
if(request == "installed?") { 
    respond(true) 
} }) 
+0

Я понял, наконец. В 'manifest.json' ->' matches' у меня было ''. Вместо этого я поставил, например, _www.facebook.com_, и это сработало. Когда я вхожу ** facebook ** на новую вкладку, ** хром **, он обнаруживает, установлено ли мое расширение или нет. 'manifest.json':' "content_scripts": [ { "matches": ["https://www.facebook.com/"], "js": [ "third/jquery-1.11.3. js ", " script.js "], " run_at ":" document_start " } ],' –

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