具体实施方式
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
随着浏览器市场的逐渐完善,“个性化”服务越来越被产品研发部门重视。为了更好的给用户一种个性化的阅览体验,许多产品提供了“更换皮肤”这一个性化服务,并以此延伸出许多实用的功能,如“夜间模式”等,得到了市场和用户的良好反映,在优化阅览体验上,其重要性可见一斑。
更换皮肤的一个最重要的功能,就是让网页之外的元素(如地址栏等,以下简称为“网页外元素”)与网页内部的元素(以下简称为“网页内元素”)的样式相呼应,如:皮肤的样式为“粉色回忆”,则网页内和网页外的元素均应调整与粉色相适配的样式;若为最常用的“夜间模式”,则网页内和网页外的元素均应为深色。
以此为例,“夜间模式”的整体皮肤为暗色,色调为暗色调,以在夜间灯光较暗时能够减少亮色对眼睛的刺激,是一种对用户而言相当实用的功能。在调整为“夜间模式”后,理想状况下,网页内和网页外的背景均调成“靛蓝色”,而元素(如按钮、文字等)则调成比靛蓝色稍浅一些的“宝蓝色”。在这种情况下,如果不对高亮颜色做调整,可能会出现如下情况:如果默认高亮颜色与背景颜色相近,不容易辨识。例如,在某些特定终端或设备上,默认高亮颜色为浅黄色,而背景颜色也为较淡的颜色,辨识效果不理想。
相关技术中提及,高亮颜色目前有两种调整方式,一种是修改内核,另一种是使用网页设计者的权限。现分别对两种调整方式进行分析。
修改内核这一方式通常由个别定制WebKit控件的浏览器所用,也即通过修改浏览器内核组件,在内核中修改高亮颜色,然后将其捆绑到其应用程序安装包中来实现。采用本方法虽然可以在多数设备上实现修改“高亮颜色”的功能,且性能上相对较好,但在实际的产品体验上,会存在应用程序安装包较大(通常比没有采用修改定制WebKit组件的浏览器要多占用5MB到6MB的存储空间)、无法运用更新的***(例如安卓(Android))的新特征等问题。
以Android为例,修改内核这一方式通过提取Android的WebKit组件,然后修改、重新编译、捆绑等方式,从底层实现了修改高亮颜色的功能。其具体执行过程包括:
步骤1、下载对应Android版本的WebKit组件的完整源代码;
步骤2、应用实现(或部分实现)修改内核的算法来修改WebKit组件;
步骤3、重新编译修改后的WebKit组件,生成Android动态链接库文件,通常该文件大小为10MB;
步骤4、下载对应Android版本的WebView控件的完整源代码;
步骤5、应用实现(或部分实现)修改内核的算法来修改WebView控件;
步骤6、将步骤5修改后的WebView控件与在先的步骤2修改后的WebKit组件进行关联;
步骤7、将修改后的WebKit组件加入到该应用程序的安装包中。
虽然修改内核这一方法适用于各个平台,但在Android平台上(不排除其它平台)需“修改WebKit组件”才得以实现,其主要原因正如相关技术所述,WebView控件本身不支持高亮颜色的调整,除非绕过WebView控件重新修改WebKit组件。而浏览器内核组件通常为操作***的内核之一,为了兼容较旧的Android操作***版本,必须要使用能够支持最旧的Android版本所对应的Webkit(浏览器内核组件的一个产品,下同)的版本,就必须放弃或以适配等方式来实现更高的Android版本的功能。
由上述分析可知,修改内核这一方式的缺点主要有:
1、无法充分运用新的***(例如Android)版本的特性,影响用户体验;
2、手机浏览器的安装包会增大很多,一般为5MB到6MB字节不等,不利于其网络的流通,且因安装包较大,安装过程较慢;
3、修改浏览器内核组件存在一定的风险,加大开发和适配的难度,有可能导致浏览器崩溃而难以查出具体原因。
除了修改内核这一方式外,前文还提出利用网页设计者权限修改高亮颜色这一方式。具体的,将色值注入于CSS(Cascading Style Sheet,级联样式表)之中,以实现自定义网站色调的效果。通过注入CSS,也即通过模拟浏览器用户在地址栏中注入脚本,并在CSS中指定“-webkit-tap-highlight-color”属性,传递参数为RGB(红绿蓝)颜色值,将CSS注入网页。在渲染网页的过程中,支持“高亮颜色”修改的浏览器内核会认为颜色是由“网页开发者”发起修改,则自动调整为指定颜色。
但是,这一方式也存在一定的问题,具体如下:
1、每次打开网页都需要注入CSS,而每一次注入都意味着重新定义和刷新一次网页,性能上会有不小的消耗;
2、目前,仅iOS设备公开支持了这一方法,且仅适用于“网页开发者”。而Android的不少设备(尤其是Android4.0以下的)均不支持这一功能,通用性不强。
基于现有技术存在的问题,本发明实施例实现了一种在不注入CSS或脚本,且不修改浏览器内核的前提下,实现修改“高亮颜色”的功能。颜色、透明度均可任意的调整,不受设备和网页开发者的限制,不仅性能上不受任何影响,开发较为简易,且支持大多数平台或***或设备(例如Android)。由于修改高亮颜色为个性化功能中较为重要的一环,该发明实施例可应用的范围也较为宽广,不仅仅局限于皮肤等功能和应用,具备高亮功能的任何器件或设备或终端或***等均可使用。
基于上述发明构思,本发明实施例提供了一种设置高亮颜色的方法,应用于具备高亮功能的设备或***中。图1示出了根据本发明一个实施例的设置高亮颜色的方法的处理流程图。参见图1,本方法至少包括步骤S102至步骤S104:
步骤S102、反射获取网页显示控件中的高亮颜色对象的域;
步骤S104、生成预配置颜色的画笔对象并传递至高亮颜色对象的域中,以设置相应的高亮颜色。
在本发明实施例中,利用画笔对象将预配置颜色传递至高亮颜色对象的域中,设置相应的高亮颜色。相对于现有技术提到的修改内核或者使用网页设计者的权限修改颜色的方式,本发明实施例提供的方法不需要更改平台本身的组件,通用性强,适用于各种不同的版本的平台,降低出现因版本不兼容导致功能无法实现的问题的概率。进一步,采用本发明实施例提供的方法不需要在相应设备或***中增加控件进行安装,节省流量,并能够节省现有技术中为修改高亮颜色所增加控件的存储空间,提高颜色修改的速率。并且,使用预配置颜色的画笔对象能够根据用户的选择或其他需求随意更改颜色,不会在每次颜色修改时都重新定义和刷新网页,提高对应的设备或***的性能。
为保证可以根据用户需求实现高亮颜色的个性化设置,步骤S102提及的获取高亮颜色对象的域之后,可以将高亮颜色对象的域设置为可访问的公开域。相对于私有域而言,公开域可访问性更强,更容易实现高亮颜色的可调或可控,进而实现高亮颜色的个性化设置。具体的,可以通过将高亮颜色对象的域的setAccessible参数修改为true,来达到将高亮颜色对象的域设置为可访问的公开域的目的。
为将本发明实施例提供的设置高亮颜色的方法阐述地更清楚更明白,现以具体实施例对其进行说明。
本实施例以Android***为例,详述设置或更改高亮颜色的方法的流程。该流程根据不同的阶段可以分为创建初期和绘制过程(onDraw)两部分。
首先,在流程创建初期,需要对涉及的变量以及相应行为进行定义,以供后文使用。
变量定义:
1、网页显示控件对象,以下称为mWebView:该类的类型为WebView,也即WebView控件。
2、网页显示控件类的对象,以下称为WebViewOrClassicClass:类型为Class,用于反射。Android版本如果大于或者等于4.1,则该类的对象代表的应为WebViewClassic类的对象,否则为WebView类的对象。
3、网页显示提供器字段的对象,以下称为mWebViewClassicField:类型为Field,用于反射。其中,网页显示提供器主要用于控制网页的显示。
4、网页显示提供器对象,以下称为mWebViewProvider:类型为Object,用来存储真正要操作的WebView控件对象。其中,网页显示提供器主要用于控制网页的显示。
5、触摸高亮画笔字段对象,以下称为mTouchHightlightPaintField:类型为Field。
行为定义:
将私有属性设为公有属性:用于反射。
将私有属性设为公有属性的具体方法为:在反射到Field或者Method的对象以后,调用上述对象的setAccessible方法,将其参数设置为true。
此处的参数设置步骤的目的为:将反射到的Field或者Method的对象从私有的,设置为可访问的公开的形式。
实施时,若涉及其他对象或参数,涉及“将私有设为公有”的,均可以按照上述方法使用。
在各变量以及相应行为定义结束后,启动Android***关于高亮颜色设置的创建部分流程。其中,创建流程的启动时机为:在WebView即将被初始化的时候。同时,在WebView初始化的过程中,可以设置高亮颜色对象的域为可访问的公开域。
需要说明的是,高亮颜色对象的域的性质的设置可以有多种实现方式,本发明实施例优选采用参数设置的方式,即,在反射获取到高亮颜色的域的对象后,将setAccessible参数修改为true,从而实现了上述目的。
实施时,反射获取到高亮颜色的域的对象的步骤较为复杂,具体的,包括如下步骤:
步骤A、反射WebViewOrClassic中的mProvider对象,将其结果存储为mWebViewClassicField对象;
步骤B、调用mWebViewClassicField对象,将mProvider对象赋值给mWebViewProvider;
步骤C、反射WebViewOrClassic中的mTouchHightlightPaint对象,将结果赋值给mTouchHightlightPaintField对象。
为将高亮颜色的调整方式阐述地更清楚更明白,现提供一个完整的流程,从版本识别开始,一直到高亮颜色设置完毕结束。具体请参见下文介绍(图2以及图3)。
图2示出了根据本发明一个实施例的设置高亮颜色的方法的创建部分流程示意图。参见图2,该方法至少包括如下步骤:
步骤S202、判断Android***是否具备高亮功能,若是,执行步骤S204,若否,流程结束。
具体地,可以通过判断当前的Android版本是否大于2.2达到判断其是否具备高亮功能的目的,也即判断版本号(Build.VERSION_CODE)是否大于8。小于该版本的Android***不支持高亮功能,故无法设置其颜色,也即不必进行初始化的操作。
步骤S204、确定Android***所调用的类,若是应用WebViewClassic类,则执行步骤S208,若是应用WebView类,则执行步骤S206。
具体地,可以通过判断当前的Android版本是否大于或者等于4.1确定该***所能够调用的类,也即判断Build.VERSION_CODE是否大于或者等于16,若不小于16,则应用WebViewClassic类,若小于16,则应用WebView类。
步骤S208、将WebViewClassic类赋值给WebViewOrClassic类的对象,触发步骤S210。
具体地,反射WebViewOrClassic中的mProvider对象,也即调用getField方法,其结果存储为mWebViewClassicField对象,并将私有设为公有,以便后来调用和操作;
进一步,调用mWebViewClassicField对象的get方法,参数为mWebView,将真正需要用到的mProvider变量取出,最后赋值给mWebViewProvider。
步骤S206、将WebView类赋值给WebViewOrClassic对象,触发步骤S210。
步骤S210、反射WebViewOrClassic的mTouchHightlightPaint对象(类型为Paint类型,可指定其RGB颜色值),也即调用getField方法来获得,将结果赋值给mTouchHightlightPaintField,然后将其从私有变为公有。步骤S212、继承WebView类,并覆写onDraw方法,流程结束。
图2所示的创建流程结束后,承继步骤S212,即可进入onDraw流程。在onDraw流程中,可以实现高亮颜色的设置或修改或更新等个性化措施。图3示出了根据本发明一个实施例的设置高亮颜色的方法的onDraw流程示意图。参见图3,该方法至少包括如下步骤:
步骤S302、判断Android***是否具备高亮功能,若是,执行步骤S304,若否,流程结束。
具体地,可以通过判断当前的Android版本是否大于2.2达到判断其是否具备高亮功能的目的,也即判断版本号(Build.VERSION_CODE)是否大于8。小于该版本的Android***不支持高亮功能,故无法设置其颜色,流程也就不需要继续执行。
步骤S304、创建一个画笔(Paint)画笔对象。
步骤S306、设置Paint对象的颜色。
具体的,可以通过调用setColor方法实现颜色的设置,该方法涉及的参数为一个颜色值,其值为十六进制,格式为0xAARRGGBB(包括RGB和不透明度),其中AA为不透明度,从0-99不等,越高则颜色越表现的不够透明,而RR为RGB中的Red(红色)值,GG为Green(绿色)值,BB为Blue(蓝色)值。RGB中包含了红绿蓝三种基色,三种基色调和后可以生成目前已知的各种颜色,因此,结合RGB和透明度基本能够满足用户关于颜色设置的个性化需求。
步骤S308、调用mTouchHighlight画笔Field的set方法,将该Paint对象传递进去,流程结束。
结合图2以及图3所示流程得到的技术方案能够方便快捷有效地实现对高亮颜色设置或更新或修改等满足个性化的功能或动作。由于本发明实施例所提供的方法方便快捷有效,且不需要对***本身做大的改动,因此通用性极强,能够适用于任何具备高亮功能的器件或终端或设备或***中。考虑到不同的设备默认的高亮颜色也不尽相同,因此,对于不同的设备或终端,颜色的选择或修改也不完全相同,充分体现了个性化设置。
例如,通常,在调整为“夜间模式”后,理想状况下,网页内和网页外的背景均调成靛蓝色,而元素(如按钮、文字等)则调成比靛蓝色稍浅一些的宝蓝色。若不对高亮颜色做修改,则会根据设备的默认值和网站开发者的定义来进行,可能会出现下面几种常见情况:默认高亮的颜色为深蓝色,则和背景颜色相近,没有效果;在摩托罗拉等手机上,默认高亮的颜色为浅黄色,效果不理想。而采用本发明实施例提供的方法,用户就可以将其改为与夜间模式相匹配的正红色或其他颜色,甚至还可以将其定义为带透明效果的红色,根据用户的选择而定。
综上可知,基于现有技术所存在的缺陷,本发明实施例实现了一种在不注入CSS或脚本,且不修改浏览器内核的前提下,实现修改“高亮颜色”的功能。颜色、透明度均可任意的调整,不受设备和“网页开发者”的限制,不仅性能上不受任何影响,开发较为简易,且支持绝大多数Android设备,实为一种较为完美的解决方案。
上文仅仅是以Android为例,本发明实施例所提供的方法不仅仅适用于Android***,同样适用于其他需要进行高亮颜色调整的***,例如iOS***、塞班***、Windows***等等。
为实施上述任意一个优选实施例或其组合,基于同一发明构思,本发明实施例还提供了一种设置高亮颜色的装置,应用于具备高亮功能的设备或***中。图4示出了根据本发明一个实施例的设置高亮颜色的装置的结构示意图。参见图4,设置高亮颜色的装置至少包括:
获取模块410,配置为反射获取网页显示控件中的高亮颜色对象的域;
颜色设置模块420,与获取模块410耦合,配置生成预配置颜色的Paint对象并传递至高亮颜色对象的域中,以设置相应的高亮颜色。
在一个优选的实施例中,参见图4,上述设置高亮颜色的装置还可以包括:
域设置模块430,与获取模块410耦合,配置为将获取模块410获取的高亮颜色对象的域设置为可访问的公开域。
在一个优选的实施例中,域设置模块430还可以配置为将高亮颜色对象的域的setAccessible参数修改为true。
在一个优选的实施例中,预配置颜色的颜色参数为十六进制的颜色值,包括RGB和不透明度。
在一个优选的实施例中,高亮颜色在绘制过程中生成。
在本发明实施例中,利用Paint对象将预配置颜色传递至高亮颜色对象的域中,设置相应的高亮颜色。相对于现有技术提到的修改内核或者使用网者设计者的权限修改颜色的方式,本发明实施提供的方法不需要更改平台本身的组件,通用性强,适用于各种不同的版本的平台,降低出现因版本不兼容导致功能无法实现的问题的概率。进一步,采用本发明实施例提供的方法不需要在相应设备或***中增加控件进行安装,节省流量,并能够节省现有技术中为修改高亮颜色所增加控件的存储空间,提高颜色修改的速率。并且,使用预配置颜色的Paint对象能够根据用户的选择或其他需求随意更改颜色,不会在每次颜色修改时都重新定义和刷新网页,提高对应的设备或***的性能。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的设置高亮颜色的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。