2014-09-02 17 views
9

Używam skryptu zawartości do manipulowania danymi w DOM. Używam document.execCommand ("copy"); powodzeniem na stronie popup.Skrypt Kopiuj/wklej na skrypcie zawartości (rozszerzenie Chrome)

Teraz szukam sposobu, aby zadziałał on w skrypcie treści. Sprawdziłem ograniczenia dla skryptów treści here, ale nie rozumiem, czy kontrola w programie Clipboard jest ograniczona, czy nie. Sprawdziłem również odpowiedzi tutaj - w stackoverflow, ale wydaje się, że większość z nich jest niepewna, a niektóre pochodzą sprzed kilku lat, więc mogły pojawić się zmiany.

Nawet jeśli jest ograniczony, czy możliwe jest obejście tego problemu?

Dziękujemy!

Zamieszczam bieżący skrypt, który mam.

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"}); 
}); 

i funkcji wewnątrz page-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

Czy możesz potwierdzić, że skrypt jest wstrzykiwany w ogóle? Powinieneś spróbować przekazać 'tab.id' zamiast' null'. – Xan

+0

Co to jest "PoleIME"? Czy jest on zawarty w twoim 'page-editor.js', czy też jest w jego własnym skrypcie? – Xan

+0

Tak, potwierdzam, że skrypt został wstrzyknięty, a DOM został pomyślnie zmanipulowany. PoleIME to pole wejściowe wypełnione danymi. Jest to zawarte w skrypcie. Textarea copyForm został pomyślnie dołączony do treści i został pomyślnie wypełniony i wybrany. Widzę wynik na stronie, ale funkcja kopiowania nie działa. Cały skrypt jest w stanie roboczym, a nie zoptymalizowany i ma 6600 wierszy - dlatego go nie uwzględniłem. –

Odpowiedz

21

skrypty Treści nie mogą korzystać ze schowka w tej chwili . W przyszłości, po rozwiązaniu problemu crbug.com/395376, kod wyświetlony w pytaniu będzie działał zgodnie z zamierzeniami.

Do tego błędu jest stała, trzeba wysłać dane do strony tłem i skopiować tekst stamtąd:

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

Script na background page lub 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

Bardzo dziękuję za pomoc. Mam nadzieję, że jutro będę pracował w biurze. Skomentuje to. –

+1

DZIAŁA PERFEKCYJNIE! Jesteś niesamowity :) –

+2

Błąd jest naprawiony od 9/2014 –