gpt4 book ai didi

javascript - 在自定义上下文菜单中实现 'Paste'

转载 作者:行者123 更新时间:2023-12-03 12:38:29 26 4
gpt4 key购买 nike

这是我正在尝试解决的问题 - 我完全不确定它是否可能。我有一个网络应用程序,我需要启用从应用程序到应用程序的数据复制/粘贴,但我遇到了粘贴问题。如果我使用 CTRL + V 快捷方式过去,我可以使用

从剪贴板获取数据
e.originalEvent.clipboardData.getData('text')

在“粘贴”事件处理程序中,它工作正常。我需要启用的是自定义上下文菜单中的“粘贴”,我的第一次尝试是像这样手动发送粘贴事件

var event = new KeyboardEvent('paste', {
view: window,
bubbles: true,
cancelable: true
});
document.dispatchEvent(event);

它实际上点击了粘贴事件处理程序,但我无法像前一个案例那样访问剪贴板数据。我知道这是因为安全问题而被禁止的——如果允许的话,任何页面都可以从剪贴板访问数据。我的问题是如何实现这一点——我们能够将数据从 excel 复制到例如google drive 文档并使用自定义上下文菜单 ( http://pokit.org/get/?1b5f6f4f0ef4b80bb8637649121bcd75.jpg ) 将其粘贴到那里,所以我相信这是可能的。谢谢大家!

最佳答案

因此,在我的 Web 应用程序中,我有一个自定义上下文菜单,它具有“粘贴”操作(弹出窗口中的一堆 '<li>' 标记)。当用户点击“粘贴”时,我调用这个函数

if (browser === 'CHROME') {
var extensionId = 'some_id';
chrome.runtime.sendMessage(extensionId, { message: "getClipboardData" },
function (clipboardData) {
console.log('Clipboard data: ', clipboardData);
var txt = $('.helper_textarea');
$(txt).val(clipboardData);
// Call 'paste' function we have clipboard data
}
);
}

在我的扩展程序中,我有 paste.js 文件

function getDataFromClipboard() {
var bg = chrome.extension.getBackgroundPage();
var helperTextArea = bg.document.getElementById('sandbox');
if (helperTextArea == null) {
helperTextArea = bg.document.createElement('textarea');
document.body.appendChild(helperTextArea);
}
helperTextArea.value = '';
helperTextArea.select();

// Clipboard data
var clipboardData = '';

bg.document.execCommand("Paste");
clipboardData = helperTextArea.value;
helperTextArea.value = '';

return clipboardData;
}

chrome.runtime.onMessageExternal.addListener(
function(req, sender, callback) {
if (req) {
if (req.message) {
if (req.message == "installed") {
console.log('Checking is extension is installed!');
callback(true);
}
else if(req.message = "getClipboardData") {
console.log('Get clipboard data');
callback(getDataFromClipboard());
}
}
}
return true;
}
);

在 list 文件中

   "background" : {
"scripts" : [ "paste.js" ]
},
"externally_connectable": {
"matches": ["*://localhost:*/*"]
},

当然

  "permissions": ["clipboardRead" ],

我用这个函数来检查是否添加了扩展

   isExtensionInstalled: function (extensionId, callback) {
chrome.runtime.sendMessage(extensionId, { message: "installed" },
function (reply) {
if (reply) {
callback(true);
} else {
callback(false);
}
});
},

这很管用。现在的问题是如何将其移植到 Edge。什么相当于'chrome.runtime.sendMessage'在边缘?感谢您的帮助。

关于javascript - 在自定义上下文菜单中实现 'Paste',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48178302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com