2014-09-02 2 views
9

콘텐츠 스크립트를 사용하여 DOM의 데이터를 조작하고 있습니다. 나는 사용하고있다 document.execCommand ('copy'); 팝업 페이지에서이 (가) 성공적으로 완료되었습니다.클립 보드 콘텐츠 스크립트 (Chrome 확장자)에 복사/붙여 넣기

이제 콘텐츠 스크립트에서 작동하도록하는 방법을 찾고 있습니다. 콘텐츠 스크립트 here에 대한 제한 사항을 확인했지만 클립 보드 컨트롤이 제한되는지 여부를 이해하지 못합니다. 나는 또한 여기에 답변을 확인했습니다 - stackoverflow,하지만 대부분의 불확실하고 일부는 몇 년 전부터 변경되었을 수도 있습니다 보인다.

제한적이라 할지라도 일종의 해결 방법이있을 수 있습니까?

감사합니다.

나는 현재 가지고있는 스크립트를 게시하고 있습니다.

manifest.json을

{ 
    "name": "Page action by URL", 
    "version": "1.0", 
    "description": "Прибавка за обработка на данните от НБДН.", 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "page_action" : 
    { 
    "default_icon" : "icon-19.png", 
    "default_title" : "Приложение за НБД за PHP" 
    }, 
    "permissions" : [ 
    "clipboardWrite", 
    "clipboardRead", 
    "declarativeContent", 
    "activeTab", 
    "tabs", 
    "https://nbd.grao.government.bg/graoappshort/*" 
    ], 
    "icons" : { 
    "48" : "icon-48.png", 
    "128" : "icon-128.png" 
    }, 
    "manifest_version": 2 
} 

background.js

chrome.runtime.onInstalled.addListener(function() { 
    // Replace all rules ... 
    chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { 
    // With a new rule ... 
    chrome.declarativeContent.onPageChanged.addRules([ 
     { 
     conditions: [ 
      new chrome.declarativeContent.PageStateMatcher({ 
      pageUrl: { urlContains: 'nbd.grao.government.bg/graoappshort/' }, 
      }) 
     ], 
     actions: [ new chrome.declarativeContent.ShowPageAction() ] 
     } 
    ]); 
    }); 
}); 


chrome.pageAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: 'page-editor.js'}); 
    chrome.tabs.insertCSS(null, {file: "style-inject.css"}); 
}); 

및 페이지 editor.js 내부의 기능

function(){ 
     var copyFrom = document.createElement("textarea"); 
     copyFrom.textContent = PoleIME.value; 
     document.body.appendChild(copyFrom); 
     copyFrom.focus(); 
     document.execCommand('SelectAll'); 
     document.execCommand('Copy'); 
     //document.body.removeChild(copyFrom); 
     } 
+0

는 것을 확인할 수 있습니다

// content script chrome.runtime.sendMessage({ type: 'copy', text: 'some text to copy' }); 

스크립트를 background page 또는 event page에 : 그 버그가 해결 될 때까지

, 당신은 거기에서 텍스트를 배경 페이지에 데이터를 전송하고 복사해야 스크립트가 전혀 주입되지 않습니까? 'null '대신'tab.id'를 전달해야합니다. – Xan

+0

'PoleIME'이란 무엇입니까? 그것은'page-editor.js'에 포함되어 있습니까? 아니면 페이지 자체의 스크립트에 있습니까? – Xan

+0

예, 스크립트가 삽입되었고 DOM이 성공적으로 조작되고 있는지 확인합니다. PoleIME은 데이터로 채워진 입력 필드입니다. 그것은 스크립트에 포함되어 있습니다. textarea copyForm이 본문에 성공적으로 추가되고 성공적으로 채워지고 선택됩니다. 페이지에 결과가 표시되지만 복사 기능이 작동하지 않습니다. 전체 스크립트가 작동 상태에 있으며 최적화되지 않았고 6600 행입니다. 그래서 그 스크립트가 포함되지 않은 것입니다. –

답변

21

내용 스크립트는 순간에 클립 보드를 사용할 수 없습니다 . 앞으로 crbug.com/395376이 해결되면 질문에 표시된 코드가 의도 한대로 작동합니다.

chrome.runtime.onMessage.addListener(function(message) { 
    if (message && message.type == 'copy') { 
     var input = document.createElement('textarea'); 
     document.body.appendChild(input); 
     input.value = message.text; 
     input.focus(); 
     input.select(); 
     document.execCommand('Copy'); 
     input.remove(); 
    } 
}); 
+0

도움을 주셔서 감사합니다. 내일이 일이 사무실에서 일하게되기를 바랍니다. 윌 코멘트. –

+1

완벽하게 작동합니다! 당신은 놀랍습니다 :) –

+2

버그는 9/2014 년 이후로 고정 된 상태입니다 –