0

тестовая страница: https://www.google.comКак скопировать в буфер обмена через chrome.notification.create с chrome.notification.onClicked в дополнении Firefox WebExtension?

Он работает в Chrome, но в Firefox Nightly 52.0a1 это дает мне эту ошибку при нажатии на уведомлении:

document.execCommand ('вырезать'/'копии') была отказана потому что не было вызывается из внутри пользовательского обработчика событий короткого времени работы

функция

copyTextToClipboard() был взят из Copy to Clipboard in Chrome Extension

manifest.js

{ 
    "description": "Test for JSON Notifiaction + Clipboard Copy", 
    "manifest_version": 2, 
    "name": "Test3", 
    "version": "1.0", 

    "permissions": [ 
     "<all_urls>", 
     "clipboardWrite", 
     "notifications", 
     "webRequest" 
    ], 

    "background": { 
     "scripts": ["background.js"] 
    } 
} 

background.js

'use strict'; 
let JSON_obj = { 
     "name" : "ABCDEFG", 
     "age" : 3, 
      }; 

function logURL(requestDetails) { 
    // filter rules to check requestDetails.url for specific parameters { 
     notify(JSON_obj); 
    // } 
} 

function notify(notifyMessage) { 
    var options = { 
     type: "basic", 
     iconUrl: chrome.extension.getURL("icons/test.png"), 
     title: "", 
     message: JSON.stringify(notifyMessage, null, "\t") 
    }; 

    chrome.notifications.create("uniqueID3", options); 
} 

chrome.notifications.onClicked.addListener(function() { 
    console.log('Clicked notification message text: ', JSON_obj); 
    copyTextToClipboard(JSON.stringify(JSON_obj, null, "\t")); 
}); 

function copyTextToClipboard(copyText) { 
    var copyFrom = document.createElement("textarea"); 
    copyFrom.textContent = copyText; 
    var body = document.getElementsByTagName('body')[0]; 
    body.appendChild(copyFrom); 
    copyFrom.select(); 
    document.execCommand('copy'); 
    body.removeChild(copyFrom); 
    } 


chrome.webRequest.onBeforeRequest.addListener(
    logURL, { 
     urls: ["<all_urls>"] 
    } 
); 
+0

Документация достаточно понятна: * «В Firefox 41 и более поздних версиях функция буфера обмена включена по умолчанию в любом обработчике событий * *** который может всплывать окно (полунадежные скрипты) *** *. "*, я не думаю, что есть что-то в этом роде, кроме использования Flash и т. д. или плагинов, что упрощает использование Flash, например ZeroClipBoard , – adeneo

+0

Итак, если бы я добавил всплывающее окно в функции onClicked.addListener(), это могло бы сработать? – Vega

+0

https://bugzil.la/1197451 –

ответ

0

См https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/clipboard-helper.js#L2 - вы не можете скопировать из фонового сценария. Ваш код copyTextToClipboard отлично работает при вводе на страницу, например, в примере: https://github.com/mdn/webextensions-examples/blob/master/context-menu-copy-link-with-types/background.js#L31