【问题标题】:How to copy to clipboard via chrome.notification.create with chrome.notification.onClicked in a Firefox WebExtension add-on?如何通过 chrome.notification.create 在 Firefox WebExtension 附加组件中使用 chrome.notification.onClicked 复制到剪贴板?
【发布时间】:2016-10-02 20:09:38
【问题描述】:

测试页:https://www.google.com

它可以在 Chrome 中运行,但在 Firefox Nightly 52.0a1 中,单击通知时会出现此错误:

document.execCommand(‘cut’/‘copy’) 被拒绝,因为它不是 从短期运行的用户生成的事件处理程序内部调用

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

【问题讨论】:

  • 文档对此非常清楚,“在 Firefox 41 及更高版本中,剪贴板功能在任何事件处理程序中默认启用 能够弹出一个窗口(半可信脚本) .",我认为除了使用 Flash 等或使使用 Flash 更容易,例如 ZeroClipBoard。
  • 那么如果我在 onClicked.addListener() 函数中添加一个弹出窗口,它可以工作吗?
  • 嗯,不,重点不是打开弹出窗口,重点是任何允许打开新窗口的功能,也将允许使用剪贴板,那就是由用户操作直接启动的功能。
  • 至少,您将需要 manifest.json 中的 clipboardWrite 权限(请参阅 Daniel Herr 链接的错误,以及您在 comment on your prior question 中提到的)。添加该权限并不能使其真正起作用。然而,它确实消除了控制台错误,所以现在它只是默默地失败了。

标签: javascript notifications onclick firefox-addon firefox-addon-webextensions


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多