2013-02-21 14 views
6

Chcę napisać dane do clipborada z rozszerzenia chrome, które tworzę. W pliku manifestu dałem uprawnienia zarówno do clipboardRead, jak i clipboardWrite.dlaczego document.execCommand ("copy") nie działa w skrypcie treści mojego rozszerzenia chrome?

używać tej funkcji, co uważam here

ale to nie działa. wydaje się, że "document.execCommand (" copy ");" nie mogę pracować.

Piszę wszystkie te kody w skrypcie treści.

thx oczywisty:

{ 
    "manifest_version":2, 

    "name":"easyCopy", 
    "description":"just a small toll", 
    "version":"1.0.0", 

    "permissions":[ 
     "clipboardWrite", "http://*/*", "clipboardRead" 
    ], 

    "content_scripts":[ 
     { 
      "matches":["http://*/*"], 
      "js":["jquery-1.9.1.min.js", "main_feature.js"] 
     } 
    ], 

    "background":{ 
     "persistent":false, 
     "page":"background.html" 
    } 
} 

main_feature.js:

copyOrderId(); 
function copyOrderId() { 
    $(".order-num").click(function() { 
     var curOrderNum = $(this).text(); 
     copyTextToClipboard(curOrderNum); 
//  chrome.extension.sendMessage({method:"copy", content:curOrderNum}, function (response) { 
//   clog(response); 
//  }); 
    }); 


} 

function copyTextToClipboard(text) { 
    var copyFrom = $('<textarea/>'); 
    copyFrom.text(text); 
    $('body').append(copyFrom); 
    copyFrom.select(); 
    document.execCommand('copy', true); 
    copyFrom.remove(); 

} 
function clog(message) { 
    console.log(message); 
} 

background.html jest tylko pusta strona z korpusu html.

+1

Udostępniaj swój pełny odpowiedni kod, w tym manifest itp. – Sudarshan

+0

thx, zredagowałem moje pytanie i udostępniłem je wszystkie –

Odpowiedz

8

Dzięki wszystkim, skończyło się za pomocą tego:

document.execCommand nie może pracować w skrypcie treści. Zamiast tego wysyłam dane do strony w tle, a następnie uruchamiam funkcję "copyTextToClipboard".

Zauważ, że musisz umieścić swój JavaScript w pojedynczym pliku .js zamiast mieszać go z background.html.

Dodatkowo, textarea musi mieć właściwość id lub class.

+0

Czy możesz wyjaśnić dalej? jeśli zdefiniuję ukryte pole w pliku js opartym na skrypcie treści, czy mogę uzyskać dostęp do jego wartości w tle dla celów kopiowania? – Volatil3

+0

@ Volatil3: Przepraszamy, nie widziałem Twojego komentarza. Zdefiniuj ukryte pole w tle, a następnie możesz je skopiować. jeśli chcesz skopiować dowolną rzecz w skrypcie treści, musisz wysłać dane do tła za pomocą funkcji API MessagePassing w chrome. –

+0

Ten błąd został naprawiony w przeglądarce Chrome 39 - zobacz https://code.google.com/p/chromium/issues/detail?id=395376 –

Powiązane problemy