百分浏览器论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖回复
楼主: frank

[求助] [疑似 bug] 82版JS小标签是不是不支持 navigator.clipboard.writeText()

[复制链接]

7

主题

6673

回帖

1万

积分

超级版主

(^^ゞ

Rank: 8Rank: 8

积分
18978
发表于 2024-4-20 12:40:15 | 显示全部楼层
frank 发表于 2024-4-20 03:56
win7 环境  百分浏览器82版  安全模式 已经测试,  navigator.clipboard.writeText 无效

   同样环境,  ...

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

使用道具 举报

35

主题

282

回帖

1981

积分

金牌会员

Rank: 6Rank: 6

积分
1981
发表于 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楼的脚本是可以正常工作的。

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


  1. javascript:navigator.clipboard.writeText(document.title);
复制代码

需要勾选“模拟所聚焦的网页”,才能正常运行

  1. javascript:(()=>{navigator.clipboard.writeText(document.title)})();
复制代码

把他变成函数,无须勾选“模拟所聚焦的网页”,就能正常运行。

  1. javascript:var result=window.confirm("点击确定复制:网址,点击取消复制:标题");if(result){navigator.clipboard.writeText(document.location.href)}else{navigator.clipboard.writeText(document.title)};
复制代码

这样也报错,需要勾选才能正常运行。



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

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

  9. <body>
  10.         <button onclick="navigator.clipboard.writeText(document.title)">复制标题</button>
  11.         <button onclick="navigator.clipboard.writeText(document.location.href)">复制url</button>
  12.         
  13.         <button onclick="copytitle()">function-复制标题</button>
  14.         <button onclick="copyurl()">function-复制url</button>
  15.         
  16.         <button onclick="popup()">function-弹窗</button>

  17.     <script>
  18. function copytitle(){
  19.         navigator.clipboard.writeText(document.title);
  20.         console.log();
  21. }
  22. function copyurl(){
  23.         navigator.clipboard.writeText(document.location.href);
  24.         
  25. }

  26. function popup(){
  27.         var result = window.confirm("点击确定复制:网址,点击取消复制:标题");
  28.         if (result) {
  29.                 navigator.clipboard.writeText(document.location.href)
  30.         } else {
  31.                 navigator.clipboard.writeText(document.title)
  32.         }
  33.         
  34. }
  35.     </script>
  36. </body>

  37. </html>
复制代码




回复

使用道具 举报

35

主题

1273

回帖

4731

积分

论坛元老

Rank: 8Rank: 8

积分
4731
 楼主| 发表于 2024-4-20 21:33:48 | 显示全部楼层
coult3 发表于 2024-4-20 10:41
我这边win10+百分82正式版+新配置

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

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

使用道具 举报

35

主题

1273

回帖

4731

积分

论坛元老

Rank: 8Rank: 8

积分
4731
 楼主| 发表于 2024-4-20 21:45:31 | 显示全部楼层
S8F8ry 发表于 2024-4-20 12:40
我这边试了下可以通过小脚本复制标题,有可能是楼上提到的文档无焦点限制,你有测试过我或者楼上发的那些 ...

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

使用道具 举报

7

主题

6673

回帖

1万

积分

超级版主

(^^ゞ

Rank: 8Rank: 8

积分
18978
发表于 2024-4-20 23:30:15 | 显示全部楼层
coult3 发表于 2024-4-20 18:31
超版你好,我这边82正式版,7楼的脚本是可以正常工作的。

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

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

但是这样写到 122 内核以上反而会丢失用户手势。

另一种两全的写法是:
  1. function popup() {
  2.   const result = window.confirm('点击确定复制:网址,点击取消复制:标题');
  3.   navigator.permissions.query({
  4.     name: 'clipboard-write'
  5.   }).then(res => {
  6.     if (res.state == 'granted' || res.state == 'prompt') {
  7.       navigator.clipboard.writeText(result ? document.location.href : document.title);
  8.     } else {
  9.       alert('请允许写入剪贴板!');
  10.     }
  11.   });
  12. }
复制代码

这在新旧内核中执行起来的效果是一致的。
¯\(°_o)/¯
回复

使用道具 举报

35

主题

282

回帖

1981

积分

金牌会员

Rank: 6Rank: 6

积分
1981
发表于 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);


回复

使用道具 举报

7

主题

6673

回帖

1万

积分

超级版主

(^^ゞ

Rank: 8Rank: 8

积分
18978
发表于 2024-4-21 13:32:50 | 显示全部楼层
coult3 发表于 2024-4-21 10:55
谢谢,学习了,另外请问“在 window.confirm() 后 Clipboard API 丢失用户手势”是什么意思,用户手势又 ...

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

使用道具 举报

35

主题

282

回帖

1981

积分

金牌会员

Rank: 6Rank: 6

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

了解了,感谢
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|百分浏览器论坛

GMT+8, 2024-5-14 06:44 , Processed in 0.045520 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表