2014-09-02 10 views
9

Ich verwende ein Inhaltsskript, um Daten im DOM zu bearbeiten. Ich habe document.execCommand ('copy'); erfolgreich auf einer Popup-Seite.Zwischenablage Kopieren/Einfügen in Content-Skript (Chrome-Erweiterung)

Ich bin jetzt auf der Suche nach einer Möglichkeit, um es mit einem Content-Skript arbeiten. Ich habe die Einschränkungen für Inhaltsskripte überprüft here, aber ich verstehe nicht, ob Zwischenablage-Steuerelement beschränkt ist oder nicht. Ich habe auch Antworten hier überprüft - in stackoverflow, aber es scheint, dass die meisten unsicher sind und einige sind von vor ein paar Jahren, so könnte es Änderungen geben.

Auch wenn es begrenzt ist, ist es möglich, eine Art Workaround zu haben?

Vielen Dank!

Ich poste das aktuelle Skript, das ich habe.

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

und die Funktion innerhalb Seite-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

Können Sie bestätigen, dass Das Skript wird überhaupt injiziert? Sie sollten versuchen, 'tab.id' anstelle von' null' zu übergeben. – Xan

+0

Was ist 'PoleIME'? Ist es in Ihrem 'page-editor.js' enthalten oder befindet es sich in dem eigenen Skript der Seite? – Xan

+0

Ja, ich bestätige, dass das Skript injiziert wurde und das DOM erfolgreich manipuliert wurde. PoleIME ist ein Eingabefeld, das mit Daten gefüllt ist. Es enthält das Skript. Die textarea copyForm wird erfolgreich an den Body angehängt und erfolgreich gefüllt und ausgewählt. Ich sehe das Ergebnis auf der Seite, aber die Kopierfunktion funktioniert nicht. Das ganze Skript ist in einem funktionierenden Zustand und nicht optimiert und ist 6600 Zeilen - deshalb habe ich es nicht aufgenommen. –

Antwort

21

Inhalt Skripte können nicht über die Zwischenablage zur Zeit verwenden . Wenn in der Zukunft crbug.com/395376 aufgelöst wird, funktioniert der Code wie in der Frage gezeigt wie vorgesehen.

Bis dieser Fehler behoben ist, müssen Sie die Daten an die Hintergrundseite senden und den Text von dort kopieren:

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

Script auf background page oder 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

Vielen Dank für Ihre Hilfe. Hoffentlich bekomme ich dieses Ding morgen im Büro zur Arbeit. Wird dann kommentieren. –

+1

FUNKTIONIERT PERFEKT! Du bist erstaunlich :) –

+2

Der Fehler ist behoben seit 9/2014 –