Chrome

2011-08-06 28 views
7

'da çalışmak üzere execCommand ('yapıştır') alınamıyor Uzantımla ilgili bir sorunla karşılaştım. Etrafa baktım ve ne yapmam gerektiğini buldum, işe yaramayacağım.Chrome

function pasteAndGo() 
{ 
    document.execCommand('paste') 
    alert("Pasted") 
} 

uyarı gelir, ama hiçbir şey yapıştırıldığını:

Şimdiye kadar var.

Bir değişime ihtiyacım var, değişmesi gereken document bölümüdür, ancak ne olduğunu bulamıyorum. içerik alma yeteneğine sahip focues bir kontrole ihtiyaç

+0

Bu kodu nereden yapıyorsunuz? – serg

+5

Şuna bir bakın: http://farter.users.sourceforge.net/blog/2010/11/20/accessing-operating-system-clipboard-in-chromium-chrome-extensions/ –

+0

Bu kod şu anda normal bir web sayfası, background.html değil.Bununla birlikte, bu artık deneysel bir API değildir ve Chrome'un bir parçası olarak 13 sürümünden biri haline gelmiştir (http://code.google.com/chrome/extensions/whats_new.html#13). Bu, şimdi çalışması gerektiği anlamına gelir. Ayrıca, bunun için izinler ekledim :) –

cevap

2

Normal bir sayfada, yalnızca bir arka plan sayfasında yürütülemezsiniz.

+1

Tüm görünmez tekstüre şeyini yapar mısın? Kod örneği olan var mı? –

+1

artık doğru değil, aşağıdaki cevaba bakın ('chrome 39'dan itibaren, içerik komut dosyaları, bu pano API'lerini, manifesto dosyasında pano izinlerini bildirdikten sonra da kullanabilirler.) – schellmax

+2

Bir arkaplan sayfası örneği mi? –

0
+0

Bu benim bilgi formu (sayfadaki diğer Stack Overflow sorusuna bağlantı) bulduğum tam sayfa. Doğru alanda yapıştırmaya çalışacağım ve çalışacağım? : S –

+0

panoda ne olduğunu kabul edebilecek bir şeye odaklanmanız gerekiyor - panoya metin içerdiğinde bir textarea gibi ... – Yahia

9

Chrome'da bir deneysel pano API olması için kullanılır, ancak bu Chrome'da uzaklaştırıldı 13.

Krom fazla standart document.execCommand('paste'), document.execCommand('copy') ve document.execCommand('cut') komutları doğru hareket etti

: Chrome'da https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands

sen' manifestinize eklenmesi gereken izinlere ihtiyacınız olacaktır: "clipboardRead" ve "clipboardWrite". http://developer.chrome.com/extensions/declare_permissions.html

Chrome 38'e kadar, bu panoya izinleri yalnızca arka plan komut dosyaları gibi uzantı sayfalarında kullanılabilir. Chrome 39'dan itibaren, içerik komut dosyaları, bu pano API'lerini manifesto dosyasında (crbug.com/395376) pano izinlerini bildirdikten sonra da kullanabilir.

+0

Artık bu belgede panodan herhangi bir söz görünmüyor .. –

+0

update-- işte burada: http://developer.chrome.com/extensions/declare_permissions.html –

1

Sen document.execCommand('paste') kullanmak clipboardRead izin ve execCommand('copy') ve execCommand('cut') kullanmak clipboardWrite izni ayarlamak gerekir.
Aksi takdirde, izinler reddedilir ve hiçbir şey olmaz.

Daha fazla ayrıntı için bağlantıyı this kontrol edin.

5

Bu, arka plan sayfamda benim için iyi çalışıyor. Tabii

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

Uzantınız hala "clipboardRead" iznine ihtiyacı vardır ve geri içerik komut dosyasına bu bilgileri almak için geçen iletiyi kullanmak zorunda:

content.js:

chrome.extension.sendMessage({ 
    cmd: "clipboard", //$NON-NLS-0$ 
    action: "paste" //$NON-NLS-0$ 
}, function(response) { 
    if (response.paste) { 
     var range = document.getSelection().getRangeAt(0); 
     range.deleteContents(); 
     range.insertNode(document.createTextNode(response.paste)); 
    } 
}); 

arka plan .js:

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

function onClipboardMessage(request, sender, sendResponse) { 
    if (request.action === "paste") { //$NON-NLS-0$ 
     sendResponse({ 
      paste: getClipboard() 
     }); 
    } 
} 

chrome.extension.onMessage.addListener(onClipboardMessage); 
+0

@peter -Hunterli Merhaba Peter, bu örnek nasıl? İstediğin şey bu muydu? – stackunderflow

+0

Merhaba @josephduffy işe yaradı mı? Örnek yardım ettin mi? – stackunderflow