S8F8ry 发表于 2024-4-20 12:40:15

frank 发表于 2024-4-20 03:56
win7 环境百分浏览器82版安全模式 已经测试,navigator.clipboard.writeText 无效

   同样环境,...

我这边试了下可以通过小脚本复制标题,有可能是楼上提到的文档无焦点限制,你有测试过我或者楼上发的那些小脚本吗?

coult3 发表于 2024-4-20 18:31:19

本帖最后由 coult3 于 2024-4-20 18:34 编辑

S8F8ry 发表于 2024-4-20 00:14
又试了试,发现只有百分在 https://hao.centbrowser.cn 这个网站里始终是 denied 的(今天图方便就一直都 ...
超版你好,我这边82正式版,7楼的脚本是可以正常工作的。

但发现了一些玄学问题,就不知为什么了。


javascript:navigator.clipboard.writeText(document.title);
需要勾选“模拟所聚焦的网页”,才能正常运行

javascript:(()=>{navigator.clipboard.writeText(document.title)})();
把他变成函数,无须勾选“模拟所聚焦的网页”,就能正常运行。

javascript:var result=window.confirm("点击确定复制:网址,点击取消复制:标题");if(result){navigator.clipboard.writeText(document.location.href)}else{navigator.clipboard.writeText(document.title)};
这样也报错,需要勾选才能正常运行。



另外下面的html中,除了 function-弹窗 需要勾选“模拟所聚焦的网页”,才能正常运行 ,否则不能正常运行外,
其余4个按钮都能正常工作,无须勾选“模拟所聚焦的网页”。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Copy to Clipboard Example</title>
</head>

<body>
      <button onclick="navigator.clipboard.writeText(document.title)">复制标题</button>
      <button onclick="navigator.clipboard.writeText(document.location.href)">复制url</button>
      
      <button onclick="copytitle()">function-复制标题</button>
      <button onclick="copyurl()">function-复制url</button>
      
      <button onclick="popup()">function-弹窗</button>

    <script>
function copytitle(){
      navigator.clipboard.writeText(document.title);
      console.log();
}
function copyurl(){
      navigator.clipboard.writeText(document.location.href);
      
}

function popup(){
      var result = window.confirm("点击确定复制:网址,点击取消复制:标题");
      if (result) {
                navigator.clipboard.writeText(document.location.href)
      } else {
                navigator.clipboard.writeText(document.title)
      }
      
}
    </script>
</body>

</html>




frank 发表于 2024-4-20 21:33:48

coult3 发表于 2024-4-20 10:41
我这边win10+百分82正式版+新配置

控制台运行 navigator.permissions.query({name: 'clipboard-write',}). ...

:handshake 哎呀, 太感谢了! 给了多种思路, 留待慢慢探索, 就喜欢这样 即事穷理的精神, 再次多谢您的帮助...:lol

frank 发表于 2024-4-20 21:45:31

S8F8ry 发表于 2024-4-20 12:40
我这边试了下可以通过小脚本复制标题,有可能是楼上提到的文档无焦点限制,你有测试过我或者楼上发的那些 ...

测试过您 七楼发的小脚本, 是可以的! 但我在 4.3版中的 代码是 confirm直接 navigator.clipboard.writeText 行之有效, 但在 82版, 可能要更规范些才可以, 总之, 问题已经解决, 多谢超版 管理员以及坛友的大力帮助...:lol

S8F8ry 发表于 2024-4-20 23:30:15

coult3 发表于 2024-4-20 18:31
超版你好,我这边82正式版,7楼的脚本是可以正常工作的。

但发现了一些玄学问题,就不知为什么了。


1. 小脚本里套在匿名函数中就可以执行我觉得可以是小脚本的漏洞吧。
2. 在 window.confirm() 后 Clipboard API 丢失用户手势是 Chromium 的历史遗留问题,在 122 内核才被处理,在这之前只能使用一些奇奇怪怪的方法解决,例如:
function popup() {
const result = window.confirm('点击确定复制:网址,点击取消复制:标题');
window.setTimeout(() => {
    navigator.clipboard.writeText(result ? document.location.href : document.title);
}, 0);
}
但是这样写到 122 内核以上反而会丢失用户手势。:L

另一种两全的写法是:
function popup() {
const result = window.confirm('点击确定复制:网址,点击取消复制:标题');
navigator.permissions.query({
    name: 'clipboard-write'
}).then(res => {
    if (res.state == 'granted' || res.state == 'prompt') {
      navigator.clipboard.writeText(result ? document.location.href : document.title);
    } else {
      alert('请允许写入剪贴板!');
    }
});
}
这在新旧内核中执行起来的效果是一致的。

coult3 发表于 2024-4-21 10:55:14

S8F8ry 发表于 2024-4-20 23:30
1. 小脚本里套在匿名函数中就可以执行我觉得可以是小脚本的漏洞吧。
2. 在 window.confirm() 后 Clipboar ...

谢谢,学习了,另外请问“在 window.confirm() 后 Clipboard API 丢失用户手势”是什么意思,用户手势又是什么?搜索不到啊?

倒是搜到了:阮一峰-剪贴板操作 Clipboard API 教程
发现异步函数也可以解决失焦问题。
async function copyPageUrl() {
try {
    await navigator.clipboard.writeText(location.href);
    console.log('Page URL copied to clipboard');
} catch (err) {
    console.error('Failed to copy: ', err);

S8F8ry 发表于 2024-4-21 13:32:50

coult3 发表于 2024-4-21 10:55
谢谢,学习了,另外请问“在 window.confirm() 后 Clipboard API 丢失用户手势”是什么意思,用户手势又 ...

User Gesture,中文应该是这样直译吧,具体含义就是指一些需要先经过用户"激活"才允许的操作或事件,比如这里写入剪贴板操作就需要用户使文档已聚焦。

coult3 发表于 2024-4-21 18:47:47

S8F8ry 发表于 2024-4-21 13:32
User Gesture,中文应该是这样直译吧,具体含义就是指一些需要先经过用户"激活"才允许的操作或事件,比如 ...

了解了,感谢:handshake
页: 1 [2]
查看完整版本: [疑似 bug] 82版JS小标签是不是不支持 navigator.clipboard.writeText()