1

Так что я пытаюсь отправить данные с веб-страницы в приложение Chrome (а не расширение Chrome). По моему мнению, для этого требуется, прежде всего, использование url_handlers для вызова приложения Chrome с веб-страницы, content scripts для ввода JS на веб-страницу и/или Messaging для связи между приложением Chrome и веб-страницей.Использование сценариев контента/обмена сообщениями с приложениями Chrome (не расширение) для отправки данных

Кроме того, установлено приложение от его .crx, иначе загрузка распакованный каталог приводит к этой ошибке:

" content_scripts is only allowed for extensions and legacy packaged apps, but this is a packaged app."

Теперь я попытался инъекционного JS в требуемом месте. Однако при проверке с помощью инструментов Chrome Dev нет такой записи в разделе Sources->Content scripts для этого сайта. Он просто не вводил себя при использовании приложения Chrome. Он отлично работает с расширениями, но я хочу использовать приложение Chrome для других функций.

В качестве альтернативы, я искал Messaging примеров, где его использование упоминается как:

"... your app or extension can receive and respond to messages from regular web pages."

Но, так или иначе я не мог заставить его работать.
Любые заголовки на любом из подходов? Другие предложения?

manifest.json:

{ 
    "name": "App", 
    "version": "1.0", 
    "manifest_version": 2, 
    "minimum_chrome_version": "31", 
    "app": { 
    "background": { 
     "scripts": ["background.js"] 
    } 
    }, 
    "permissions": [ 
    {"fileSystem": ["write", "retainEntries", "directory"]}, 
    "storage", 
    "http://example.com/*" 
    ], 
    "externally_connectable": { 
    "matches": ["http://example.com/*"] 
    }, 
    "content_scripts": [{ 
    "matches": ["http://example.com/*"], 
    "js": ["content.js"] 
    }] 
} 

ответ

3

В самом деле, вы не можете иметь сценарии контента в приложении.

Однако using externally_connectable действителен.

Вы уже заявили, что хотите быть внешне подключаемым от example.com. (Примечание: будьте осторожны при определении шаблонов соответствия, например, это один не покрывает www.example.com)

В собственных сценариях example.com «s, то вы можете включать в себя следующее:

chrome.runtime.sendMessage("idOfYourAppHere", message, function(response) { 
    /* ... */ 
}); 

И в приложение (возможно, его фон скрипт), вы можете поймать, что с

chrome.runtime.onMessageExternal.addListener(function(message, sender, sendResponse) { 
    /* ... */ 
    sendResponse(response); 
}); 

Это делает требует, чтобы вы знали идентификатор заранее. Вы можете закрепить его, упаковав свое расширение и извлекая "key" field из манифеста. См. this question для получения более подробной информации.

+0

спасибо за головы. Таким образом, контент-скрипты полностью исключены. Это была важная информация для меня. Кроме того, ранее я просматривал версию фрагмента, которую вы упомянули [здесь] (https://developer.chrome.com/extensions/messaging#external-webpage). И действительно, это сработало! Понял, что я пытаюсь 'console.log()' в background.js, который не печатал. На этот раз я попробовал распечатать в обратном вызове script.com и сделал! #Accepted :) На аналогичных строках, как мне отлаживать вещи в background.js? –

+1

Вам необходимо открыть Dev Tools для 'background.js'. Вы можете сделать это на странице 'chrome: // extensions', найдите запись для своего приложения. Обратите внимание, что фоновая страница будет выгружать (и терять весь вывод консоли) в режиме ожидания, если Dev Tools для нее не будет открыт. Также полезна страница 'chrome: // inspect/# apps '. – Xan

+0

Ах получилось!При нажатии «фоновой страницы» в разделе «Просмотр взглядов» на странице «chrome: // extensions» открывается консоль для «background.js». Даже щелкнув правой кнопкой мыши по самому приложению Chrome, вы можете выбрать опцию «Inspect background page». Благодарим за уведомление о 'chrome: // inspect/# apps' странице. –