阅读:1975回复:7
一个关于菜单命令可用性改变的疑问和求助
原来一直用着fx 37b1,期间沉迷游戏中一直懒得更新
最近玩得累了,稍有闲暇,便顺手更新了一下,到42b3 更新之后大部分扩展脚本都没问题,小部分有问题的也花了点时间搞定,然而有一个变化让我很困扰 在之前的版本中,复制和剪切在焦点不在页面内,或未选中页面元素时为不可用状态;有选择元素后,复制命令才变为可用状态 而现在的版本,该两个选项总是可用状态 如图 以上截图来自纯净版的默认配置37b1及42b3,测试页面如下:(其中body下的空白为9行《br /》,不知道为什么会被转义) <!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> Text Content </body> </html> 因此导致某个脚本的判断代码失效 var controller = top.document.commandDispatcher.getControllerForCommand(aCommand); if (controller && controller.isCommandEnabled(aCommand)){ //do something } else { //do something else } 由于是业余用户,并不清楚浏览器对象的更多知识,现在的临时解决方案是判断用户是否有选择页面的东西…… var controller = top.document.commandDispatcher.getControllerForCommand('cmd_copy'); if (controller && !top.content.document.getSelection().isCollapsed){ //do something } else { //do something else }而剪切命令的判断,更是只能暂时直接跳过判断执行了,由此也导致许多情况下导致误判,比方说本论坛的帖子编辑页面,选择文本时用getSelection判断是没有用的 我想求助的问题是: 1. 为什么现在复制和剪切命令总是可用状态?在没有选择对象的情况下,这两个命令好像并没有实际作用 2. 有更可靠的办法实现原来脚本的功能吗? |
|
|
1楼#
发布于:2015-10-16 01:09
曾在 http://mozilla.com.cn/thread-344180-1-1.html 研究过:
根据 https://bugzilla.mozilla.org/show_bug.cgi?id=1162952 及相关的MDN和bug,这是一种有意的改变,从41开始,这两个命令是始终为可用。 解决方法并未研究过。脚本是想要做什么? |
|
2楼#
发布于:2015-10-16 08:01
yfdyh000:曾在 http://mozilla.com.cn/thread-344180-1-1.html 研究过: 原来如此. Mozilla想得真前...让我想起某些网站复制文本内容时, 会强行阻断并将剪切板的内容替换成“该信息引用自OOXX, 未经允许不得转载“之类的 这个脚本忘了是哪儿偷的了, 作用是当复制不可用时, 转而复制当前标签的URL;当剪切不可用时, 转而剪切当前标签(复制URL且关闭标签) (其他的一些操作也有类似的扩展, 不过因为没有问题所以没有提及) |
|
|
3楼#
发布于:2015-10-16 08:14
|
|
4楼#
发布于:2015-10-16 09:46
|
|
|
5楼#
发布于:2015-10-16 14:07
你已经冷落这里好久了……
|
|
|
6楼#
发布于:2015-10-18 10:39
nsIClipboard
fang5566:你已经冷落这里好久了……回到原帖诶黑,因为不更新所以也就没遇到问题了…… yfdyh000:尝试剪切/复制,然后看内容是否为空,就可以了吧。回到原帖 测试之后发现,当Clipboard已经有内容的情况下,再次在页面上执行复制/剪切(也就是未选中状态,37版本中不可用时)不会对Clipboard产生任何影响,而且似乎也没有留下任何可查询的状态改变……似乎在用户端看来,这两种复制/剪切操作是无法区分的。所以靠这种方法大概是不行了 而检查getSelection的方法对本坛无效是因为编辑器实际上是在一个iframe里的,并不能从content.document里获知selection的内容_(:3 」∠)_ 难道mozilla做这个变更时就没有留下什么标志位吗,比方说一个“虽然看起来是可用的但是实际上并没有什么卵用”的bool值什么的…… |
|
|
7楼#
发布于:2015-10-18 17:49
|
|