2014-09-02 4 views
9

Я использую скрипт Content для управления данными в DOM. Я использовал document.execCommand ('copy'); успешно на всплывающей странице.Буфер обмена Копировать/Вставить скрипт содержимого (расширение Chrome)

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

Даже если он ограничен, возможно ли иметь какое-то обходное решение?

Спасибо!

Я отправляю текущий сценарий, который у меня есть.

manifest.json

{ 
    "name": "Page action by URL", 
    "version": "1.0", 
    "description": "Прибавка за обработка на данните от НБДН.", 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "page_action" : 
    { 
    "default_icon" : "icon-19.png", 
    "default_title" : "Приложение за НБД за PHP" 
    }, 
    "permissions" : [ 
    "clipboardWrite", 
    "clipboardRead", 
    "declarativeContent", 
    "activeTab", 
    "tabs", 
    "https://nbd.grao.government.bg/graoappshort/*" 
    ], 
    "icons" : { 
    "48" : "icon-48.png", 
    "128" : "icon-128.png" 
    }, 
    "manifest_version": 2 
} 

background.js

chrome.runtime.onInstalled.addListener(function() { 
    // Replace all rules ... 
    chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { 
    // With a new rule ... 
    chrome.declarativeContent.onPageChanged.addRules([ 
     { 
     conditions: [ 
      new chrome.declarativeContent.PageStateMatcher({ 
      pageUrl: { urlContains: 'nbd.grao.government.bg/graoappshort/' }, 
      }) 
     ], 
     actions: [ new chrome.declarativeContent.ShowPageAction() ] 
     } 
    ]); 
    }); 
}); 


chrome.pageAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: 'page-editor.js'}); 
    chrome.tabs.insertCSS(null, {file: "style-inject.css"}); 
}); 

и функции внутри страницы-editor.js

function(){ 
     var copyFrom = document.createElement("textarea"); 
     copyFrom.textContent = PoleIME.value; 
     document.body.appendChild(copyFrom); 
     copyFrom.focus(); 
     document.execCommand('SelectAll'); 
     document.execCommand('Copy'); 
     //document.body.removeChild(copyFrom); 
     } 
+0

Можете ли вы подтвердить, что скрипт вообще вводится? Вы должны попробовать передать 'tab.id' вместо' null' тоже. – Xan

+0

Что такое 'PoleIME'? Он содержится внутри вашего 'page-editor.js' или находится в собственном скрипте страницы? – Xan

+0

Да, я подтверждаю, что сценарий инъецируется и DOM успешно обрабатывается. PoleIME - поле ввода, которое заполняется данными. В нем содержится сценарий. Textarea copyForm успешно добавляется к телу, и он успешно заполняется и выбирается. Я вижу результат на странице, но функция копирования не работает. Весь сценарий находится в рабочем состоянии и не оптимизирован и составляет 6600 строк - вот почему я его не включил. –

ответ

21

контента скрипты не могут использовать буфер обмена в данный момент , В будущем, после того, как будет разрешен crbug.com/395376, код, показанный в вопросе, будет работать по назначению.

Пока что ошибка не устранена, вы должны отправить данные на фоне страницы и скопировать текст оттуда:

// content script 
chrome.runtime.sendMessage({ 
    type: 'copy', 
    text: 'some text to copy' 
}); 

скрипт на background page или event page:

chrome.runtime.onMessage.addListener(function(message) { 
    if (message && message.type == 'copy') { 
     var input = document.createElement('textarea'); 
     document.body.appendChild(input); 
     input.value = message.text; 
     input.focus(); 
     input.select(); 
     document.execCommand('Copy'); 
     input.remove(); 
    } 
}); 
+0

Большое спасибо за вашу помощь. Надеюсь, у меня эта работа будет работать завтра в офисе. Будет комментировать тогда. –

+1

РАБОТАЕТ СОВЕРШЕННО! Вы удивительны :) –

+2

Ошибка исправлена ​​с 9/2014 –