在我们的应用程序中,我们有一个自定义粘贴函数,该函数调用window.clipboardData.getData(“ Text”)以获取当前剪贴板数据。然后,它对该数据执行某些功能。在Edge中,未定义window.clipboardData。尽管在以下情况中使用了getData,但在“ paste”事件中使用getData似乎确实有效。
document.addEventListener("paste", function(e) {
var test = e.clipboardData.getData("text/plain");
});
我可能可以设计一种解决方法,其中涉及粘贴事件的这种覆盖,但这不是理想的。最好在事件外部调用的解决方案。
顺便说一句,我读到Edge在某一点上不支持剪贴板API,但是我的理解是这是固定的,因此,请找到一些专门确保当前功能的东西(例如,clipboardData有效,但不等同于window。如果这是您的答案,则存在剪贴板数据。
答案 0 :(得分:4)
与所有现代浏览器一样,Edge也使用官方的ClipboardEvent::clipboardData:
inp.onpaste = evt =>
console.log(evt.clipboardData.getData('text'));
<input id="inp">
继续吧。不建议使用的非标准 window :: clipboardData 仅作为旧版IE的旧版支持的一种方式。
关于您想做的事情(没有用户交互的粘贴),与the specs recommendations for privacy背道而驰。您将无法通过网络内容进行操作。您需要从特权级别较高的脚本(如扩展程序)中运行脚本。
•实施不得让脚本创建合成剪贴板事件来访问真实剪贴板数据(除非用户已对其进行配置)。
答案 1 :(得分:1)
正如Kaiido指出的那样,在Edge(和Chrome而言)的粘贴事件之外,无法获得粘贴的内容。
用户以前使用自定义的右键菜单访问“从Excel粘贴”功能,将可编辑网格中的内容替换为剪贴板中的制表符分隔的内容。如果未定义window.clipboardData,则用户会收到一条消息,提示您必须在此浏览器中使用标准的CTRL + V粘贴。
然后,我添加了侦听器,该侦听器在下面基本上确定了内容是否用制表符分隔,并将其视为“来自Excel的粘贴”,而将其他数据布局视为标准的“粘贴”。这对于我的部署就足够了,但对于其他部署者,可能需要启动一个确认窗口以验证意图。
function T = bilinear(X,h,w)
% Pre-allocating the output size
T = zeros(h,w,'uint8'); % Create the matrix in the right type, rather than cast !!
% Calculating dimension ratios
hr = h/size(X,1); % Not with the padded sizes!!
wr = w/size(X,2);
% Padding the original image with 0 so I don't go out of bounds
pad = 2;
X = padarray(X,[pad,pad],'both');
% Loop
for col = 1:w % Looping over the row in the inner loop is faster!!
for row = 1:h
% For calculating equivalent position on the original image
o_row = row/hr;
o_col = col/wr;
fo_row = floor(o_row); % Code is simpler when using floor here !!
fo_col = floor(o_col);
% Getting the intensity values from horizontal neighbors
Q11 = double(X(fo_row +pad, fo_col +pad)); % Indexing taking padding into account !!
Q21 = double(X(fo_row+1+pad, fo_col +pad)); % Casting to double might not be necessary, but MATLAB does weird things with integer computation !!
Q12 = double(X(fo_row +pad, fo_col+1+pad));
Q22 = double(X(fo_row+1+pad, fo_col+1+pad));
% Calculating the relative positions to the enlarged image
d_row = o_row - fo_row;
d_col = o_col - fo_col;
% Interpolating on 2 first axis and the result between them
R1 = (1-d_row)*Q11 + d_row*Q21;
R2 = (1-d_row)*Q12 + d_row*Q22;
T(row,col) = round((1-d_col)*R1 + d_col*R2);
end
end
end