2014-09-02 15 views
9

मैं डीओएम में डेटा में हेरफेर करने के लिए एक सामग्री स्क्रिप्ट का उपयोग कर रहा हूं। मैं document.execCommand ('copy') का उपयोग कर रहा हूं; एक पॉपअप पेज पर सफलतापूर्वकसामग्री स्क्रिप्ट (क्रोम एक्सटेंशन) पर क्लिपबोर्ड कॉपी/पेस्ट करें

अब मैं इसे सामग्री स्क्रिप्ट पर काम करने के लिए एक रास्ता खोज रहा हूं। मैंने सामग्री स्क्रिप्ट here के लिए सीमाओं की जांच की है, लेकिन मुझे समझ में नहीं आता कि क्लिपबोर्ड नियंत्रण सीमित है या नहीं। मैंने यहां जवाबों की भी जांच की है - स्टैक ओवरफ्लो में, लेकिन ऐसा लगता है कि ज्यादातर अनिश्चित हैं और कुछ कुछ साल पहले हैं इसलिए कुछ बदलाव हुए होंगे।

भले ही यह सीमित है, क्या यह किसी प्रकार का कामकाज संभव है?

धन्यवाद!

मैं वर्तमान स्क्रिप्ट पोस्ट कर रहा हूं जो मेरे पास है।

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

आपको लगता है कि पुष्टि कर सकते हैं लिपि बिल्कुल इंजेक्शन दी गई है? आपको 'null' के बजाय' tab.id' पास करने का प्रयास करना चाहिए। – Xan

+0

'पोलेइम' क्या है? क्या यह आपके 'पेज-एडिटर.जेएस' के भीतर निहित है या क्या यह पृष्ठ की अपनी लिपि में है? – Xan

+0

हां, मैं पुष्टि करता हूं कि स्क्रिप्ट इंजेक्शन दी गई है और डीओएम सफलतापूर्वक छेड़छाड़ की जा रही है। पोलेइम एक इनपुट फ़ील्ड है जो डेटा से भरा हुआ है। इसमें यह स्क्रिप्ट है। Textarea copyForm को शरीर में सफलतापूर्वक जोड़ा गया है और इसे सफलतापूर्वक भर दिया गया है और चुना गया है। मैं पृष्ठ पर परिणाम देखता हूं, लेकिन प्रतिलिपि कार्य काम नहीं करता है। पूरी लिपि एक काम करने की स्थिति में है और अनुकूलित नहीं है और 6600 पंक्तियां हैं - यही कारण है कि मैंने इसे शामिल नहीं किया। –

उत्तर

21

सामग्री स्क्रिप्ट इस समय क्लिपबोर्ड का उपयोग नहीं कर सकते । भविष्य में, एक बार crbug.com/395376 हल हो गया है, तो प्रश्न में दिखाया गया कोड इरादे के रूप में काम करेगा। background page या event page पर

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

स्क्रिप्ट::

तक कि बग ठीक हो गई है, तो आप डेटा पृष्ठभूमि पृष्ठ पर वहाँ से पाठ भेज सकते हैं और नकल करने के लिए है

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 –

संबंधित मुद्दे