iPad 上的欧路词典是怎么做到实时监听剪贴板的

查看 164|回复 10
作者:acoldfox   
最近用 iPad 装了欧路词典,发现了几个问题
1. 我在没开启欧路词典剪贴板取词的情况下,在别的 app 里复制文字之后,欧路词典会提示是否粘贴
2. 在同时打开欧路和 marginNote 的情况下,我在 margninNote 里复制了文字,欧路词典就能监听到了我做了复制操作,立马提示是否要粘贴,测试了下,欧路并不是做轮询读取剪贴板的操作,因为如果轮询读取剪贴板,会不断提示“欧路词典读取了你的剪贴板”,只是当我在复制操作完成之后,才会发起读取剪贴板的操作
3. 还有更神奇的是,我在 Mac 或者其他苹果设备上做了复制操作,欧路词典不受任何权限限制,马上就能获取到复制的内容,即使我去设置里将“从其他 App 粘贴”设为拒绝的情况下,欧路词典丝毫不影响,不会弹出任何需要允许复制的提示,直接就能实时获取到我在其他苹果设备上复制的文字
当然对于有些人来说这个功能很方便,但我觉得用户在没开启剪贴板取词的情况下,你就默认要读取剪贴板了,而且在我拒绝了“从其他 App 粘贴”下,还能不受限制的获取其他苹果设备上复制的数据。
zktsin   
第三点,是不是你手动粘贴的,用户主动粘贴是不受权限影响的
acoldfox
OP
  
@zktsin 没有手动粘贴,只要在其他设备上复制文字,ipad 上的欧路词典立刻就有反应了
lukeluke   
1. 系统剪切板内部有一个标记位叫 changeCount ,一旦内容发生变化,这个标记位就会增加。
2. 剪切板内容变化的时候会给应用发通知,应用收到通知后再看看 changeCount 有没有变化。如果变化了,说明有新的内容了,就可以尝试读取剪切板;如果没变化,就不处理。
3. 应用每次回到前台后,也可以根据 changeCount 查看剪切板是否变化过。
上面几条应该能解释 OP 的 1 2 问题。第 3 个问题,如果是用户主动点击粘贴的话,是不会请求读取权限的;如果用户没有点击粘贴,欧路还能获取剪切板内容,那就说不通了…
acoldfox
OP
  
@lukeluke 感谢解答,第三条不是用户主动粘贴的,只要在其他苹果设备上复制了文字就会触发。即使我把“从其他 App 粘贴”设为“拒绝”了,还是会自动读取,而且不会有任何提示,如果我没有关欧路词典,我在其他设备上复制的所有文字,欧路词典都能知道
zktsin   
@acoldfox 第三点,如果只是有反应,可以监听系统发的 UIPasteboardChangedNotification 通知来实现,但不授权还是获取不到剪贴板的内容。
noahhhh   
其他设备上装欧路词典了吗,欧路词典是支持 macOS 和 iOS 的“接力”功能的,dock 栏会和 Safari 一样弹出图标,macOS 应该没剪切板权限的。
dingwen07   
没有手动允许或者在设置里始终允许的话,App 应该是读不到的
acoldfox
OP
  
@noahhhh 我刚刚也怀疑是接力功能,所以我把其他设备上的欧路词典都退出了,也确保后台没有欧路词典在运行,只保留 iPad 的欧路词典打开,但是依然能读取到我在其他设备上复制的内容
acoldfox
OP
  
@zktsin UIPasteboardChangedNotification 这个好像只能对应用内的剪贴板内容变化进行通知吧,应用外的对剪贴板的改变应该是收不到通知的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部