2014-09-02 35 views
9

DOM'de verileri işlemek için bir İçerik komut dosyası kullanıyorum. document.execCommand kullanıyorum ('copy'); bir popup sayfada başarıyla.Pano Kopyala/İçerik komut dosyasına yapıştır (Chrome Uzantısı)

Artık bir İçerik komut dosyasında çalışması için bir yol arıyorum. İçerik komut dosyaları here için sınırlamaları kontrol ettim, ancak Pano denetiminin sınırlı olup olmadığını anlamıyorum. Ayrıca burada cevapları kontrol ettim - stackoverflow, ama çoğu belirsiz ve bazıları birkaç yıl önce olduğu için değişiklikler olmuş olabilir.

Sınırlı olsa bile, bir tür geçici çözüm bulunması mümkün mü?

Teşekkür ederiz!

Sahip olduğum komut dosyasını şimdi gönderiyorum.

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

ve sayfa editor.js içindeki işlevi

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

bunu teyit edebilir:

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

Komut background page veya event page tarih: O hata sabittir kadar

, oradan metni arka plan sayfasına veri göndermek ve kopyalamak zorunda betik enjekte edilir? Sen de 'null' yerine 'tab.id' geçmeyi denemelisin. – Xan

+0

'PoleIME' nedir? "Page-editor.js" dosyanızda yer alıyor mu, yoksa sayfanın kendi komut dosyasında mı? – Xan

+0

Evet, komut dosyasının enjekte edildiğini ve DOM'ın başarıyla işlendiğini doğrularım. PoleIME, verilerle dolu bir giriş alanıdır. Komut dosyasında yer alıyor. Textarea copyForm başarıyla vücuda eklenir ve başarıyla doldurulur ve seçilir. Sonucu sayfada görüyorum, ancak kopyalama işlevi çalışmıyor. Tüm komut dosyası çalışma koşulunda ve en iyi duruma getirilmemiş durumda ve 6600 satırdır - bu yüzden onu eklemedim. –

cevap

21

İçerik komut dosyaları şu anda panosunu kullanamazsınız . Gelecekte, crbug.com/395376 bir kez çözüldüğünde, soruda gösterildiği gibi kod amaçlandığı gibi çalışacaktır.

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

Yardımlarınız için çok teşekkürler. Umarım bu işi yarın ofiste işe alırım. O zaman yorum yapacak. –

+1

MÜKEMMEL İŞLER! Şaşırtıcısın :) –

+2

Hata durum 9/2014 –

İlgili konular