2011-08-06 32 views
7

Tôi đã gặp sự cố với tiện ích mở rộng của mình. Tôi đã nhìn xung quanh và tìm thấy những gì tôi phải làm, tôi chỉ không thể làm cho nó hoạt động được.Không thể nhận execCommand ('dán') để hoạt động trong Chrome

Cho đến nay, tôi đã có:

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

Cảnh báo đi lên, nhưng không có gì đã được dán.

Tôi có cảm giác đó là phần document cần thay đổi, nhưng tôi không thể tìm thấy gì.

+0

Bạn đang thực thi mã này ở đâu? – serg

+5

Hãy xem xét điều này: http://farter.users.sourceforge.net/blog/2010/11/20/accessing-operating-system-clipboard-in-chromium-chrome-extensions/ –

+0

Mã này đang được thực hiện trên một trang web thông thường, không phải background.html.Tuy nhiên, đây không còn là API thử nghiệm và được xây dựng một phần của Chrome kể từ phiên bản 13 (http://code.google.com/chrome/extensions/whats_new.html#13) Điều này có nghĩa là nó sẽ hoạt động ngay bây giờ. Ngoài ra, tôi đã thêm các điều khoản cho nó :) –

Trả lời

2

Bạn không thể thực thi nó trên một trang thông thường, chỉ trong một trang nền.

+1

Bạn có thực hiện toàn bộ nội dung văn bản vô hình không? Bất cứ ai có một mẫu mã? –

+1

không còn đúng nữa, hãy xem câu trả lời bên dưới ('như chrome 39, tập lệnh nội dung cũng có thể sử dụng API khay nhớ tạm sau khi khai báo quyền trong khay nhớ tạm thời') – schellmax

+2

Ví dụ về trang nền? –

0

bạn cần phải kiểm soát một trong focues đó là khả năng tiếp nhận các nội dung ...

Đối với một số ví dụ về clipboard trong JS thấy http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
http://help.dottoro.com/ljcvtcaw.php

Về phần mở rộng Chrome thấy Copy/Paste Not Working in Chrome Extension

+0

Đó là trang chính xác tôi đã tìm thấy biểu mẫu thông tin của tôi (Liên kết đến câu hỏi Stack Overflow khác). Tôi sẽ cố gắng làm việc để dán nó vào đúng khu vực? : S –

+0

bạn cần tập trung vào nội dung nào đó có thể chấp nhận nội dung trong khay nhớ tạm - như văn bản khi khay nhớ tạm chứa văn bản ... – Yahia

9

Đã từng có một API vào clipboard nghiệm trong Chrome, nhưng điều này đã được gỡ bỏ trong Chrome 13.

Chrome đã di chuyển về phía tiêu chuẩn hơn document.execCommand('paste'), document.execCommand('copy')document.execCommand('cut') lệnh: https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands

Trong Chrome bạn' sẽ cần quyền cần được thêm vào tệp kê khai của bạn: "clipboardRead" và "clipboardWrite". http://developer.chrome.com/extensions/declare_permissions.html

Cho đến Chrome 38, các quyền trong khay nhớ tạm này chỉ có sẵn cho các trang tiện ích mở rộng như tập lệnh nền. Kể từ Chrome 39, tập lệnh nội dung cũng có thể sử dụng các API khay nhớ tạm sau khi khai báo quyền trong khay nhớ tạm trong tệp kê khai (crbug.com/395376).

+0

Có vẻ như không còn đề cập đến clipboard trong tài liệu này .. –

+0

cập nhật-- đây là liên kết: http://developer.chrome.com/extensions/declare_permissions.html –

1

Bạn cần phải đặt giấy phép clipboardRead để sử dụng document.execCommand('paste') và quyền clipboardWrite để sử dụng execCommand('copy')execCommand('cut').
Nếu không, quyền sẽ bị từ chối và không có gì sẽ xảy ra.

Kiểm tra liên kết this để biết thêm chi tiết.

5

Điều này phù hợp với tôi trong trang nền.

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

Tất nhiên phần mở rộng của bạn vẫn cần "clipboardRead" phép và bạn phải sử dụng tin nhắn qua để có được thông tin này trở lại kịch bản nội dung của bạn:

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

nền .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 -ehrlich Hi Peter, làm thế nào về ví dụ này? Đó là những gì bạn đã yêu cầu? – stackunderflow

+0

Xin chào @josephduffy bạn có làm việc này không? Bạn đã giúp đỡ? – stackunderflow

Các vấn đề liên quan