2017-02-16 4 views
-1

Небольшая проблема при разработке расширения хром. Цель проста, и я знаю, что есть существующая должность по этому вопросу, но все, что я нашел, не сработало для меня. Похоже, что работает в обычном скрипте (html/js) не работает в расширении chrome.JS - Chrome Extension - Получение выбора

Я пытаюсь сделать простое расширение, которое при щелчке по его значку получит выбор (по крайней мере, текст, если возможно, более подробную информацию), но каким-то образом он не работает. Я получаю элемент выбора, но он имеет пустой выбор.

Вот код. manifest.json

{ 
    "manifest_version": 2, 

    "name": "Paster", 
    "description": "Bla", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "camera.png", 
    "default_title": "Bla" 
    }, 

    "background": { 
    "page": "background.html" 
    }, 

    "permissions": [ 
    "tabs", 
    "activeTab", 
    "https://ajax.googleapis.com/", 
    "clipboardRead", 
    "clipboardWrite" 
    ] 
} 

background.html

<textarea id="temp_textarea_draft_paster"></textarea> 
<div>BLA BLA BLA</div> 
<script src="jquery-3.1.1.min.js"></script> 
<script src="background.js"></script> 

background.js

chrome.browserAction.onClicked.addListener(function() { 
    getSelectionText() 
}); 

getSelectionText = function (info, tab) { 
    selection = window.getSelection(); 
    console.log(selection); 
    alert('yeah' + selection); 
}; 

Если я открываю консоль Dev из background.html я получаю console.log, но с пустой выбор, независимо от того, что я выбрал. Предупреждение появляется, но только с «да».

Если я перейду на страницу chrome-extensions: //ext-id/background.html и выберите там текст и нажмите кнопку, он будет работать с выбором, включая его данные ... Как получилось? Похоже, что расширение не получает выбор из вкладок, только со страницы background.html.

+1

См. этот http://stackoverflow.com/questions/12424631/get-selected-text-in-a-chrome-extension, который реализован с использованием 'chrome contextMenu api' – nivas

+1

Прочтите документы. https://developer.chrome.com/extensions/overview#arch –

+0

Я бы предположил, что вы прочитали [Обзор расширения Chrome] (https://developer.chrome.com/extensions/overview) (и, возможно, вместе со страницами связанный с обзором). [раздел архитектуры] (https://developer.ch rome.com/extensions/overview#arch) имеет общую информацию об архитектуре, которая должна помочь вам понять, как вообще организовано/сделано. Возможно, вам также захочется прочитать [Сценарии контента] (https://developer.chrome.com/extensions/content_scripts) и [Передача сообщений] (https://developer.chrome.com/extensions/messaging). – Makyen

ответ

1

Я нашел решение после довольно много исследований. Да, чтение документации (опять же), как было предложено, но я все еще думаю, что это не слишком четко объяснено. Однако, если кто-то получает ту же проблему, следует понимать, что background.js связан только с background.html, но не с содержимым страницы, отображаемым на активной вкладке.

Напротив, скрипт контента добавляется или применяется на активной странице и поэтому может использовать такие функции, как window.getSelection().

шаги, как следует:

В manifest.json см content_scripts, что вы хотите быть «вставлен» внутри активной страницы, а также соответствующих «спичек». (на какой странице это влияет, например, «».

Ваша фоновая страница затем может отправить сообщение (https://developer.chrome.com/extensions/messaging) в сценарий содержимого при запуске действия браузера (щелкните по значку), и скрипт содержимого прослушает это сообщение и ответьте с результатами getSelection.

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