我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS),而不留痕迹.有几个解决方案:
第一个可能是最糟糕的解决方案 - 你需要从当前窗口打开一个窗口,然后只要你打开窗户就可以进行通信.如果您在任何窗口中重新加载页面,则很可能会丢失通信.
第二种方法,使用postMessage,可能启用跨源通信,但遇到与第一种方法相同的问题.您需要维护一个窗口对象.
第三种方式,使用cookie,在浏览器中存储一些数据,这可以有效地看起来像向同一域上的所有窗口发送消息,但问题是你永远不知道所有标签是否已经读过"消息"打扫干净.您必须实现某种超时以定期读取cookie.此外,您受限于最大cookie长度,即4KB.
使用localStorage的第四种解决方案似乎克服了cookie的限制,甚至可以使用事件进行监听.接受的答案中描述了如何使用它.
编辑2018:接受的答案仍然有效,但现代浏览器有一个更新的解决方案,使用BroadcastChannel.有关如何使用BroadcastChannel在选项卡之间轻松传输消息的简单示例,请参阅其他答案.
我希望能够在用户点击时启动真正的粘贴事件.我可以理解这可能是一个安全问题,因为如果任何网页有权访问用户剪贴板,那就不好了.所以我认为所有浏览器都不允许访问剪贴板数据.
但是例如在谷歌文档(在类似文字的应用程序中),我可以从自定义上下文菜单粘贴(鼠标右键单击假装为上下文菜单的html元素),即使剪贴板数据已被复制到剪贴板中应用程序,如Microsoft Paint.这适用于Google Chrome浏览器,这是我感兴趣的浏览器.
我认为他们使用闪光灯,但即使我完全禁用闪光灯,它仍然有效.关于这个问题已经有了问题,但提到的答案并不正确.该问题的另一个答案表明谷歌正在使用Chrome扩展程序,但即使我禁用了Chrome中的所有扩展程序,它仍然有效.
如何在Windows中重现:
如果用户在我的网页上按下Ctrl + V,我知道如何访问剪贴板数据,因为这会在当前窗口中触发粘贴事件.但是,如何在用户只需单击按钮或div时,在javascript(或使用jquery)中访问剪贴板数据或启动实际剪贴板数据(例如,在mspaint中复制的位图)的粘贴?
我有一些带有“effect”类的嵌套元素,如下所示:
<style>
.effect { transition: opacity 1s, visibility 1s; }
</style>
<div id=parent class=effect>
<a href=#>aaaaaaaaaaaaa</a>
<div id=child class=effect>
<a href=#>bbbbbbbbbbbbbb</a>
<div id=childofchild class=effect>
<a href=#>cccccccccccc</a>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
通常我会调用以下命令来淡出父块(包括所有子块):
$('#parent').css({'opacity':0, 'visibility':'hidden'});
Run Code Online (Sandbox Code Playgroud)
但我注意到奇怪的行为(即使在所有内容都应该隐藏的情况下,某些链接仍然可以单击),因此我删除了不透明度更改以演示问题:
$('#parent').css({'visibility':'hidden'});
Run Code Online (Sandbox Code Playgroud)
这应该跳过不透明度更改并像以前一样运行 - 因此它应该在第一秒后隐藏父级(以及所有子级,正如我假设的那样),但它有点奇怪,它表明需要几秒钟才能隐藏子级顺序。
看起来效果只有在完成到子元素后才会缓慢传播。如何在第一秒后隐藏包括所有子元素的元素,但不需要暂时删除所有子元素上的“效果”类?
在我的 C++ 应用程序中,我有以下代码:
ShowWindow(hDlg, SW_HIDE);
MakeScreenshot();
ShowWindow(hDlg, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)
这应该捕获屏幕截图,而不需要当前应用程序窗口。然而有一个问题。SW_HIDE 需要一些时间,因为我的 Windows 8.1 配置为使用动画效果。因此,窗口的隐藏大约需要 400 毫秒,如果在此间隔期间捕获屏幕截图(事实确实如此),它还将包含应用程序本身的窗口,这是我不喜欢的。
有什么方法可以立即隐藏当前窗口,这样它就不会包含在创建屏幕截图函数中,该函数在它之后立即调用?如果没有,除了应用程序本身之外,还有其他首选方法如何截取 Windows 桌面的屏幕截图吗?在 MakeScreenshot 之前添加延迟并不是什么好的解决方案。谢谢。
我想在javascript中生成一个公钥/私钥对,并使用公钥来加密消息和私钥来解密消息。
与外部库相比,我更喜欢本机浏览器支持。我怎样才能在 JavaScript 中做到这一点?
现代浏览器实现window.crypto.subtle.generateKey. 我可以用它来生成 ECDSA 私钥/公钥来签署/验证消息,这是有效的。但是我找不到如何使用它来生成公钥/私钥来加密/解密的方法。如果我为推荐的 AES-GCM 算法尝试 generateKey,它只会生成一个 cryptoKey,它可能可用于加密和解密。但我更喜欢得到一个密钥对(publib/private 密钥),而不仅仅是一个单一的密钥。有什么建议?
该表列出了当前支持的方法,但似乎没有一种绿色算法是我需要的:https : //diafygi.github.io/webcrypto-examples/