Microsoft Edge中是否有与window.clipboardData等效的文件?

时间:2018-11-12 23:05:16

标签: javascript microsoft-edge

在我们的应用程序中,我们有一个自定义粘贴函数,该函数调用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。如果这是您的答案,则存在剪贴板数据。

2 个答案:

答案 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