2014-09-02 189 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

你能否證實腳本是注入的嗎?你應該嘗試傳遞'tab.id'而不是'null'。 – Xan 2014-09-02 11:34:42

+0

什麼是PoleIME?它是否包含在你的'page-editor.js'中,還是在頁面自己的腳本中? – Xan 2014-09-02 11:37:22

+0

是的,我確認腳本被注入並且DOM正在被成功處理。 PoleIME是一個填充數據的輸入字段。它包含在腳本中。 textarea copyForm已成功添加到主體,並且已成功填充和選擇。我在頁面上看到結果,但複製功能不起作用。 整個腳本處於工作狀態,沒有進行優化,並且是6600行 - 這就是爲什麼我沒有包含它。 – 2014-09-02 12:06:31

回答

21

內容腳本不能在目前使用剪貼板。將來,一旦解決了crbug.com/395376,那麼問題中顯示的代碼將按預期工作。

直到這個bug是固定的,你必須將數據從那裏發送到後臺頁面和複製文本:

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

腳本上background pageevent page

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

非常感謝您的幫助。希望我明天在辦公室得到這個東西。然後將評論。 – 2014-09-02 16:07:30

+1

工作完美!你真是太棒了:) – 2014-09-03 05:29:23

+2

這個錯誤是從9/2014開始的狀態修復 – 2015-02-25 19:10:48