2011-08-06 5 views
7

내 확장 프로그램에 문제가 있습니다. 나는 주변을 둘러 보았고 내가해야만하는 것을 발견했다. 나는 그것을 작동시킬 수 없다.Chrome에서 execCommand ('paste')를 사용할 수 없습니다.

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

경고가 온다,하지만 아무것도 붙여되지 않은 :

은 지금까지 내가있어.

변경해야 할 부분이 document인데 느낌이 들었습니다.하지만 찾을 수 없습니다. 당신이 콘텐츠를 수신 할 수의 focues에서 제어 할 필요가

+0

이 코드를 어디에서 실행합니까? – serg

+5

다음을 확인하십시오. http://farter.users.sourceforge.net/blog/2010/11/20/accessing-operating-system-clipboard-in-chromium-chrome-extensions/ –

+0

이 코드는 실행 중입니다. background.html이 아닌 일반 웹 페이지.그러나 이것은 더 이상 실험적인 API가 아니며 버전 13 (http://code.google.com/chrome/extensions/whats_new.html#13)의 Chrome에 내장되어있어 이제는 작동해야합니다. 또한, 그것에 대한 사용 권한을 추가했습니다 :) –

답변

2

일반 페이지에서는 백그라운드 페이지에서만 실행할 수 있습니다.

+1

전체 보이지 않는 텍스트 영역의 것을합니까? 누구나 코드 샘플을 가지고 있습니까? –

+1

이 더 이상 참이 아닙니다. 아래 답변을 참조하십시오 ('Chrome 39 기준으로 매니페스트 파일에서 클립 보드 사용 권한을 선언 한 후 콘텐츠 스크립트에서도 클립 보드 API를 사용할 수 있습니다') – schellmax

+2

배경 페이지의 예는 무엇입니까? –

0
+0

그건 내 정보 양식 (다른 스택 오버플로 질문에 대한 링크)를 찾은 정확한 페이지입니다. 올바른 영역에 붙여 넣으려고 노력할 것입니다. : S –

+0

당신은 클립 보드에있는 내용을 받아 들일 수있는 무언가에 중점을 둘 필요가 있습니다 - 클립 보드에 텍스트가 들어있을 때 텍스트 영역처럼 ... – Yahia

9

가 크롬의 실험 클립 보드 API있을 사용하지만,이 크롬에서 제거 13

크롬이 더 많은 표준 document.execCommand('paste'), document.execCommand('copy')document.execCommand('cut') 명령으로 이동

: 크롬에서 https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands

당신 ' manifest에 "clipboardRead"및 "clipboardWrite"권한을 추가해야합니다. http://developer.chrome.com/extensions/declare_permissions.html

Chrome 38까지 클립 보드 권한은 백그라운드 스크립트와 같은 확장 프로그램 페이지에서만 사용할 수있었습니다. Chrome 39부터 콘텐츠 스크립트는 매니페스트 파일 (crbug.com/395376)에서 클립 보드 사용 권한을 선언 한 후 이러한 클립 보드 API를 사용할 수도 있습니다.

+0

더 이상이 설명서에는 클립 보드에 대한 언급이 없습니다 .. –

+0

업데이트 - 여기 링크 : http://developer.chrome.com/extensions/declare_permissions.html –

1

당신은 document.execCommand('paste')를 사용하는 clipboardRead 허가 및 execCommand('copy')execCommand('cut')를 사용하는 clipboardWrite 권한을 설정해야합니다.
그렇지 않으면 사용 권한이 거부되고 아무 일도 일어나지 않습니다.

자세한 내용은 this 링크를 확인하십시오.

5

이것은 배경 페이지에서 나에게 잘 맞습니다. 물론

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

이 확장은 여전히 ​​"clipboardRead"권한이 필요합니다 그리고 당신은 다시 콘텐츠 스크립트에이 정보를 얻기 위해 메시지 전달을 사용해야합니다 :

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

배경 .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 Peter, 안녕하세요? 당신이 요구 한 것이 맞습니까? – stackunderflow

+0

안녕하세요, @ josephduffy이 일을 얻었나요? 도움이 필요하십니까? – stackunderflow

관련 문제