hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
阅读:5614回复:17

Firefox4 让我不爽的已访问链接问题

楼主#
更多 发布于:2011-03-29 10:08
我现在使用两个配置,一个是家里的大屏幕配置,至今仍有超过一半的扩展不兼容 Firefox4;一个是办公室里的小屏幕配置,将就一下基本上可以用 Firefox4 了。

(插说一下:不知怎的,Firefox4 兼容的主题怎么总有这样那样的问题,是主题作者把兼容 Firefox4 beta 的直接写成兼容正式版?还是跟我的扩展冲突?例如 Mx3 、Stratini Padded 主题)

唯一让我不爽的地方,就在于 Firefox4 以“安全理由”阻止了除字体颜色之外对已访问链接的任何样式设定。

我(相信很多人都是)需要在网上查找很多信息,经常要避免重复踩入已经看过的网页中,而已访问链接的样式自定义(例如加删除线)对我来说就是这样一个避免效率浪费的很重要功能,而这个功能在以给用户“自己的浏览器”的 Firefox 身上被阉割了,跟“斩脚趾避沙虫”有何区别呢?

(而且,技术上和事实上不是应该禁止向 getComputedStyle 返回样式表中关于 “:visited”伪类的样式更有意义吗?跟想压抑房价限买却不限卖那样刻舟求剑!)

我也在网上搜过这个问题,但除了有网友认为这“不应是强加给用户而是应该给予选择”之外,一无所获,没有将这限制“跳线掉”的自编译版,没有重新提供这功能的扩展,没有任何 hack ……

我应该怎么做呢?不升级(真的感觉快了哦)?发信质询开发组(貌似用处不大)?让 Stylish 作者搞掂?
GOLF-AT
千年狐狸
千年狐狸
  • UID11611
  • 注册日期2006-02-20
  • 最后登录2019-12-30
  • 发帖数3239
  • 经验265枚
  • 威望1点
  • 贡献值260点
  • 好评度59点
  • 社区居民
  • 忠实会员
1楼#
发布于:2011-03-29 10:08
对已经访问过的链接没什么特殊要求。Firefox 4.0好像是去除了一些属性的支持,不知道是标准里本身没有那些属性,还是什么来的。至于主题,不可能什么都很完美,有些小bug是难免的,可以向作者反应,作者也许可以在之后的版本中修改好。
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
2楼#
发布于:2011-03-29 10:08
hzhbest:而且,技术上和事实上不是应该禁止向 getComputedStyle 返回样式表中关于 “:visited”伪类的样式更有意义吗?回到原帖

经测试过后发现,的的确确 getComputedStyle 已经不能返回 “:visited” 伪类的样式了,即使对已访问链接设定的颜色已经显示出来了,getComputedStyle  返回的仍然是非已访问状态下的颜色……
而且设定的颜色使用 rgba() 的话,其中透明度(“a”)的值会被忽略(但“a”值为“0”时却是整个颜色代码不起效果),Mozilla 在这方面真的做到极致了……

PLEASE, give me back some freedom, especially since I don't have much here.
lord
非常火狐
非常火狐
  • UID6208
  • 注册日期2005-05-21
  • 最后登录2024-03-27
  • 发帖数634
  • 经验81枚
  • 威望0点
  • 贡献值12点
  • 好评度3点
  • 社区居民
  • 忠实会员
3楼#
发布于:2011-03-29 10:08
不知道bugzilla里有没有人报
心想事成,人生如梦
fiey
非常火狐
非常火狐
  • UID28955
  • 注册日期2009-05-24
  • 最后登录2013-10-05
  • 发帖数735
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
4楼#
发布于:2011-03-29 10:08
已经访问过的会超连接会变色
不知道有没别的方法自定义 来达到目的
对我来说 变色 已经够了 可以识别了
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
5楼#
发布于:2011-03-29 10:08
变色还不够明显吗?
不过前端时间好像看见可以通过CSS设置访问后的特殊效果,变背景等等,自己觉得没什么用,不过你可能需要……不过忘记在哪看的,也忘记关键字了,只能告诉你,确实有方法……
-いたんですか? -ええ、ずっと
harnack
狐狸大王
狐狸大王
  • UID25613
  • 注册日期2008-07-27
  • 最后登录2020-01-08
  • 发帖数325
  • 经验19枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 社区居民
6楼#
发布于:2011-03-29 10:08
经测试过后发现,的的确确 getComputedStyle 已经不能返回 “:visited” 伪类的样式了,即使对已访问链接设定的颜色已经显示出来了,getComputedStyle  返回的仍然是非已访问状态下的颜色……
而且设定的颜色使用 rgba() 的话,其中透明度(“a”)的值会被忽略(但“a”值为“0”时却是整个颜色代码不起效果),Mozilla 在这方面真的做到极致了……


Mozilla其实早就解释过这个问题,getComputedStyle()与:visited结合在一起别人就能获取你的历史记录,所以不得不让其撒个谎:


现在我们只能改变color, background-color, border-*-color, outline-color等属性,而且不能用rgba:
In addition, for the list of properties you can change above, you won’t be able to set rgba() or hsla() colors or transparent on them.


详见此文:http://goo.gl/7G6O
听老人说,今生做千件好事,来世方能讨生为猫。
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
7楼#
发布于:2011-03-29 10:08
harnack

详见此文:http://goo.gl/7G6O
回到原帖



原来是为了安全性考虑!赞一个,真细心
-いたんですか? -ええ、ずっと
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
8楼#
发布于:2011-03-29 10:08
harnack
Mozilla其实早就解释过这个问题,getComputedStyle()与:visited结合在一起别人就能获取你的历史记录,所以不得不让其撒个谎……
现在我们只能改变color, background-color, border-*-color, outline-color等属性,而且不能用rgba:
详见此文:http://goo.gl/7G6O
回到原帖

要开门才能看的?打不开啊……
安全这个理由我也知道,不过仍然不能越过其妨碍用户自定义的问题:
Firefox 难道就不能判断该脚本来自缓存中还是来自自己的目录中?
退一步说,Firefox 难道不能判断样式表来自网页还是来自 userContent.css ?
再退一步,Firefox 难道不能根据历史来为用户更好呈现已经访问过的链接而不干预网页本身?例如像页面内查找功能那样,3.5 以来就不需要改动页面也能轻松高亮查找到的项目;而且这可行性是已经证明了的:Link Status 这个扩展早已经诞生,就差支持 4.0 罢了,Firefox 可以使用同样原理提供功能或接口去“高亮”访问过的链接。
在提供保护的同时不提供绕过的方式,只是矫枉过正罢了。

另:支持 outline-color ?!太好了,这至少提供了一点点帮助,谢谢了!background-color 无效。
再另:见到有外国人对这个问题求助,但似乎不可能等到有禁用(或者提供选项)这个“安全功能”的自编译版了,外国人,特别是黑客,都对隐私这么重视……
kmc
kmc
管理员
管理员
  • UID165
  • 注册日期2004-11-25
  • 最后登录2022-09-22
  • 发帖数9186
  • 经验397枚
  • 威望1点
  • 贡献值124点
  • 好评度41点
  • 忠实会员
  • 终身成就
  • 社区居民
9楼#
发布于:2011-03-29 10:08
要开门才能看的?打不开啊……

http://hacks.mozilla.org/2010/03/privac ... -vistited/
Waterfox Current和Firefox Nightly都用,逐渐走出XUL扩展依赖
fiey
非常火狐
非常火狐
  • UID28955
  • 注册日期2009-05-24
  • 最后登录2013-10-05
  • 发帖数735
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
10楼#
发布于:2011-03-29 10:08
outline-color 有效么 ?
border-*-color 啥的 也没有效果呢
只有一个color

想想 要用扩展的话  
就是对网页内的所有超连接
搜索一遍历史
再加上相应的style
不过想想  对性能有影响吧 感觉还不小
harnack
狐狸大王
狐狸大王
  • UID25613
  • 注册日期2008-07-27
  • 最后登录2020-01-08
  • 发帖数325
  • 经验19枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 社区居民
11楼#
发布于:2011-03-29 10:08
不好意思,试了试发现background-color果真无效,貌似只有color有效。不过奇怪的是,MDC的官方文档里,的确是说color、background-color、border-color、outline-color四个都能用:
https://developer.mozilla.org/en/CSS/Pr ... d_selector
听老人说,今生做千件好事,来世方能讨生为猫。
fgyd1
小狐狸
小狐狸
  • UID35161
  • 注册日期2011-01-28
  • 最后登录2017-08-21
  • 发帖数85
  • 经验62枚
  • 威望0点
  • 贡献值40点
  • 好评度7点
  • 社区居民
12楼#
发布于:2011-03-29 10:08
其实我不关心为什么不能用...只关心怎样才能充分利用与改变...
只是想要一个脚本 或CSS能够满足"标记已访链接" (仅需要变更色足矣, 删除线 下划线啥都没需求)
FF自带的并不好用,NoSquint扩展(附带功能)已不兼容每夜最近几版, CSS试用了几个 都无效。哪位筒子提供个?扩展 脚本 CSS 统统都可。。。标记已访问链接 必须的!!
先谢~~
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
13楼#
发布于:2011-03-29 10:08
……MDC的官方文档里,的确是说color、background-color、border-color、outline-color四个都能用:
https://developer.mozilla.org/en/CSS/Pr ... d_selector

经再次试验,这几个CSS属性的“:visited”伪类生效的前提是,其实现的“前提属性”在非“:visited”中先生效。举个例,就是“outline-color”实现的前提是“outline-style”“outline-width”已经实现:
@namespace url(http://www.w3.org/1999/xhtml);

a:hover{
outline: 1px solid #aaf !important; 
background:#ccf !important;
}

a:visited{
color:  #bbb     !important;
outline-color: #bbb !important;
background:#ddd !important;
}

a:visited:hover {
color: black !important;
}

代码的第一段先定义了“:hover”伪类下的 outline 属性(顺便也测试了 background 属性),第二段定义“:visited”下的 outline-color (顺便也定义 background-color;其他 background 属性则是无效的);这样的定义下,当“:hover”(鼠标悬停)和“:visited”(已访问)同时成立时,“outline-color”就会是“#bbb”,两个都不成立时就跟正常的没异样;由于“:visited”下定义了链接的 color 属性,所以还需第三段去把悬停时已访问链接颜色定为黑色,以保证定义了背景色时可阅读性不受影响。
border-color 应该也是同样原理。

因为我一个旧的样式有使用链接悬停的 outline 属性,所以才发现这可用;background-color 的实现没有这前提所以之前说错了;color 属性则是本身有默认属性的,所以不需前提。(所谓“前提”,恐怕为的是给 getComputedStyle 返回数据时,避免没前提会返回“null”之类的而被利用)


想想,Firefox 是怎么做到让已访问链接可以有不同的颜色,就知道了“搜索一遍历史”对 Firefox 来说负担其实不大。不是做不了,而是需要安全的简单的实现方式。

[quote="fgyd1"]只是想要一个脚本 或CSS能够满足"标记已访链接" (仅需要变更色足矣, 删除线 下划线啥都没需求)
哪位筒子提供个?扩展 脚本 CSS 统统都可。。。标记已访问链接 必须的!!
先谢~~[/quote]
Stylish 就可以啊。直接用上面的 CSS 代码就行了。
harnack
狐狸大王
狐狸大王
  • UID25613
  • 注册日期2008-07-27
  • 最后登录2020-01-08
  • 发帖数325
  • 经验19枚
  • 威望0点
  • 贡献值0点
  • 好评度1点
  • 社区居民
14楼#
发布于:2011-03-29 10:08
多谢指点,试了下果真如此,没想到居然还有这样的“前提”。这样如果我想改变已访问链接的背景色(不管是否hover),就必须先设置所有链接的背景色(而且不能是transparent),效果可想而知。看样子还是改改color算了,其它的都不靠谱。
听老人说,今生做千件好事,来世方能讨生为猫。
上一页
游客

返回顶部