2017-12-23 14 views
0

Firefox 용 WebExtension을 작성하고 있습니다. 그것에서, 나는 webextension과 클립 보드 사이에 임의의 텍스트를 복사 할 수 있기를 원합니다. 지금까지 문서 (https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard)에서 볼 수있는 것처럼 자바 스크립트 변수와 클립 보드간에 데이터를 전송할 수있는 방법이 없습니다. DOM 요소를 우회해야합니다. Firefox webextension not copying to clipboardWebextension : 클립 보드의 텍스트를 입력 요소에 붙여 넣을 수 없습니다.

function copy(contentToCopy) { 
    var txtToCopy = document.createElement('input'); 
    txtToCopy.style.left = '-300px'; 
    txtToCopy.style.position = 'absolute'; 
    txtToCopy.value = contentToCopy; 
    document.body.appendChild(txtToCopy); 
    txtToCopy.select(); 

    console.log("Copying ", txtToCopy.value); 
    var res = document.execCommand('copy'); 
    console.log("Copy result ", res); 

    txtToCopy.parentNode.removeChild(txtToCopy); 
} 

그때

로 호출 할 수 있습니다 : 클립 보드에 텍스트를 복사

, 나는이 질문에 설명되어있는 것과 매우 유사하다 더미 방법, 함께 왔어요
copy('any arbitrary text'); 

그리고 완벽하게 작동합니다.

function paste() { 
    var txtToPaste = document.createElement('input'); 
    txtToPaste.style.left = '-300px'; 
    txtToPaste.style.position = 'absolute'; 
    txtToPaste.value = 'dummy content for debugging'; 
    document.body.appendChild(txtToPaste); 
    txtToPaste.focus(); 
    txtToPaste.select(); 

    var res = document.execCommand('paste'); 
    var result = txtToPaste.value; 
    console.log("Paste result ", res); 
    console.log('Pasted text', result); 
    console.log('txtToPaste', txtToPaste); 

    txtToPaste.parentNode.removeChild(txtToPaste); 

    return result; 
} 

가 나는 또한 내 manifest.json을 파일에 적절한 권한을 요청했습니다 :

그러나 나는 또한이 일을 같은 방법으로 클립 보드의 내용에 액세스해야하고, 얻을 수없는

"permissions": ["clipboardRead" ] 

나는 다음과 같이 메서드를 호출하려고 그러나

var dataFromClipboard = paste(); 

을 더 광택이없는 "붙여 넣기 결과"는 항상 "true"이고 "결과"는 "디버깅을위한 더미 콘텐츠"입니다. 더미 필드를 초기화하는 데 사용한 것과 변함이 없습니다).

Windows 7 (64 비트)에서 Firefox 57.0.2 (64 비트)로 테스트하고 있습니다.

나는 분명한 뭔가를 놓치고 있습니까? 이것은 왜 한 방향으로 작용 하나 다른 방향으로 작용하지 않는 것입니까?

자바 스크립트 콘솔 (확장 프로그램을 테스트하는 탭이나 전체 브라우저 콘솔에서는 볼 수 없음)은 오류를 표시하지 않습니다.

답변

0

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard#Reading_from_the_clipboard을 자세히 살펴본 후 "브라우저 별 고려 사항"섹션을 보았습니다. 내가 통해 읽고 처음에 놓친 이유는 모르겠지만, 솔루션 제공 :

파이어 폭스 버전 54에서 "clipboardRead"권한을 지원,하지만 는 content editable mode의 요소를 필요로 않는 콘텐츠에 대한 스크립트는 a에서만 작동합니다. ; 메소드 작품

이러한 변화와
function paste() { 
    var txtToPaste = document.createElement('textarea'); 
    txtToPaste.id = "txtToPaste"; 
    txtToPaste.style.left = '-300px'; 
    txtToPaste.style.position = 'absolute'; 
    txtToPaste.contentEditable = true; 
    txtToPaste.textContent = ''; 
    document.body.appendChild(txtToPaste); 
    txtToPaste.focus(); 
    txtToPaste.select(); 

    var res = document.execCommand('paste'); 
    var result = txtToPaste.textContent; 
    console.log("Copy result ", res); 
    console.log('Pasted text', result); 
    console.log('txtToPaste', txtToPaste); 

    txtToPaste.parentNode.removeChild(txtToPaste); 

    return result; 
} 

이 ( 사실-의 contentEditable 설정 입력을 텍스트 영역에 변경) : 다음과 같이

그래서이 지식으로 내 기능을 수정 한 내가 바라는대로.