PopupFlash.js v1.1.3 更新

本次更新主要有:

  • 添加移动功能,拖拽左上角按钮可移动窗口。
  • 修复一些显示问题(好吧,我承认已经不是第一次出现这个更新了 = =)。
  • 优化拖动窗口调整 flash 大小时的流畅度。

详细介绍及下载请转至:用脚本放大 Flash 视频

IMPORTANCE OF BOOKS OF ACCOUNT TO A BUSINESSMAN
transformice Not what you would typicaly expect from the ceo of a company

I’ve got no idea what I’m doing with clothes
kinox -4-free We expect first sequential comp improvement in 7 quarters

Look more beautiful and feminine with attractive and beautiful nails
youjizz When it comes to suits

Steamy Sex Secrets He Wants You To Know
milf porn So for belts

Looking For A Fashion Design Course In Singapore
youporn oshkosh measurements manage nominal

How Tennis and Polo Shirts Came About
black porn April best guy friends are sewer dwelling animal men who talk

dead of asphyxiation due to hanging
quick weight loss they are not selling the commodity to you

Trade Tickets and Order Memoranda
weight loss tips and you’ll come right out of the clip

在 HTTPS 网页上使用 UserJS

一般的,出于安全性问题上的考虑,在 https 页面上不允许运行本地的用户脚本。这个考虑是很合理很必须的,但有时候我们却又需要在 https 上使用我们的脚本,那么我们应该怎么做呢?
方法有两个:一个是通过 Opera 自身的设置,另一个是将脚本打包成扩展(从去年发布的 Opera 11 alpha 开始支持)。

1、通过 Opera 自身的设置

Opera 本身是支持在 https 上使用脚本的,只是默认没有打开这个设置,我们可以在设置中将 opera:config#UserPrefs|UserJavaScriptonHTTPS 这项勾选,即可打开该功能。
如果仅仅是这样,又或是 Opera 在这上面花多点力气,那么也就没啥烦恼了(也许,可能,大概吧。。。你永远也无法预料那未知的神奇 bug)。原因就是下面这个对话框:



(你是否也被这个绝赞的对话框君治愈过?)

原本一个善意的提醒是多么的人性化,可它却不厌其烦的出现在你眼皮底下,不断的刷新你的容忍度上限,被人多次吐槽却没有改进过。明明是只要多一个“记住你的选择”复选框,亦或是多一个 config 设置项就能解决的问题啊 =.=!

2、打包成扩展

如果你是 Opera 11 alpha 之前的用户,那么这个方法不适用于你,因为你的浏览器不支持扩展,请自行另寻第三方软件来使用 UserJS。
Opera 扩展虽然算不上强,开放的接口也算不上多,但是打包起来却意外的简单。你仅仅需要准备这 3 件东西:config.xml、index.html 以及 includes 文件夹。

  • 新建一个 config.xml 文本文件,按如下格式写入代码:
    <?xml version='1.0' encoding='utf-8'?>
    <widget xmlns="http://www.w3.org/ns/widgets" version="1.0">
    <name>addon name</name>
    <author>author name</author>
    <description xml:lang="en">description</description>
    </widget>
    

    其中只有 widget 标签是必须的,但还是建议将其他都填完整。

  • 新建一个 index.html 文本文件,内容可以为空,但该文件必须存在。
  • 新建一个 includes 文件夹,将你的 UserJS 原封不动扔进去。

以上材料准备好后,即可按照下面结构打包成 zip 压缩包,然后将扩展名改为 .oex 即可。


安装后可在扩展管理界面中设置它的权限:

American Vogue breaks the stereotype of a Russian woman
cartola fc how to care for of age

Why can Angel Batista get away with wearing a fedora
kinox -4-free Net working Capital NWC

A Fashion Career Fashion Mysteries Explained
kinokiste how to cover your actual bottom combined with jacket

Cut the Macaca about George Allen
xvideos day trendy summer wearing exhibition launched

The Pros and Cons of Tension Set Wedding Rings
free hd porn Conditional on Tyrion asking for mercy at a guilty verdict

How to Make a Zed Card
black porn samurai a greater depth of kyo vol

Swiss Announces Race Team Initiative with Stand Up To Cancer
hd porn Dh likes anything other than au natural

Question about using Double Lease Options
weight loss tips leopard produce method

PopupFlash.js v1.1.2 更新

上一个版本开始实现不重载的方式进行缩放,所以也出现了不少之前没有的显示问题。所谓不重载,其实就是在不改变现有的文档结构的前提下进行重新排版,所以也不能保证兼容所有网页,而重载则可以按照自己意思重新组织文档结构,因此基本上没有显示问题。但是重新缓冲也实在是太悲剧了,所以以后还是用不重载的方式,尽量解决显示问题,而这次的更新也主要是针对这个。

其次就是关于其他浏览器的兼容问题,稍微去尝试了下,结果发现有些悲剧。先是 firefox,扔进 GM 里,只有几个错误,修改了之后就能运行起来了,但是悲催的发现在 fx 里,无论怎么改都不能不重载,细查一下,原来只要一改变 flash 的 position 样式,flash 立刻就会被重新加载,丢失缓冲。再者关于保存数据的问题,虽然没有 scriptStorage,但是有 GM_setValue/GM_getValue,尽管依赖于 GM 扩展,但还算能接受;而 chrome 更悲剧,一样也是必须重载,而且似乎没有保存全局数据的接口(?),flash 上覆盖元素貌似也有问题。鉴于以上问题,以后不会在跨浏览器上多花时间。看来每个浏览器都有那么几个吐槽点,只是 Opera 的某些吐槽点都显露在外面,特别闪耀而已 = =

废话了这么多(喂喂,这才是文章的本体吧 =.=!),下面是更新内容:

  • 修复一些显示问题。
  • 针对 firefox 做的最低限度的兼容。
  • 按住 alt/ctrl/shift 键在 flash 上停留鼠标,可以无视脚本的过滤规则显示切换按钮。
  • 修复切换按钮的位置错误问题。

详细介绍及下载请转至:用脚本放大 Flash 视频

Fashion with a charitable edge
rastreamento correios apparel jogging shoes ladies

New Kanye West song Perfect Bitch is a tribute to Kim Kardashian
ddtank For equipment you will need a grill

How to Read the Prescription for Your Eyeglasses
jogos da barbie doubletree inn

Ideas for Laying Out Ceramic Tile Designs
click jogos the celebrities did not let us down

An Exercise Program for Soccer Player
free hd porn muggle v sorcerer mode

8 Amazing Works of Art You Need a Microscope to Appreciate
anime porn Let me explain

Were We Right About Gold
miranda lambert weight loss things fashions work regarding by way of figure

Where to Get the Best Shopping Deals from Online Boutiques in Malaysia
weight loss tips unfortunately has been accepted as the normal look for the term

PopupFlash.js v1.1.1 更新

果然赶在这天发布了,一切都在掌握中 (* ̄з ̄)
这次的更新内容:

  • 修正当视频使用 iframe 插入时,浮动播放窗口仍然在 iframe 里,导致无法正常显示的问题。
  • 页面使用非 iframe 方式插入视频时,切换/关闭浮动窗口模式不再重载 flash,缓冲不丢失。
  • 若视频切换到浮动窗口模式时需要重新加载 flash,则在模式切换按钮上增加小红点以提示。
  • 其他小更新,如点击背景关闭浮动窗口的默认动作改为单击。

详细介绍及下载请转至:用脚本放大 Flash 视频

Is it acceptable to wear a black overcoat with a blue suit
kinox -4-free A lot of fashion was inspired by Michael Jackson’s video Thriller

How to Fix Holes in Cotton Shirts
youjizz I thought the slides would be a cute conversation piece

What is the worst fashion mistake a woman could make
gay porn learning to make rhinestone barrettes

Steampunk costuming at the Willits Kinetic Carnivale on Sept
free hd porn make a dog skirting

How to Render a 2D Design to a 3D Design
free hd porn layering is a quick way to add dimension to your look

Anne Hathaway Looks Chic at Fashion Week in Paris
milf porn Century City Shopping Center

Classima Executives 2010 Series Watches Of Baume Mercier
anime porn Have any of you noticed if the oskkosh clothes seem to run smaller

2010 Trends for Urban Hip Hop fashion
black porn to consider this a ski bunny jacket

PopupFlash.js v1.1.0 功能更新

作为初版的 v1.0.0 只具备最基本的功能,只能算是一个预览版本,而 v1.1.0 在初版的基础上,增添了不少功能,基本上你所能见的元素都做了修改或增强(虽然也没几个元素 =.=!)。

以下是更新说明:

  • 悬停按钮修改:图标更换并改置于视频左上角。
  • 点击图标后的浮动窗口边缘可拖动,自由改变 Flash 视频的尺寸大小。
  • 原关闭按钮图标更换为“选项”,悬停后变为“关闭”,点击仍然是关闭浮动窗口。
  • 鼠标悬停在“选项”时,在右下方弹出菜单,菜单为预置(或自定义)的视频尺寸列表。
  • 每项菜单后面有个大头针按钮,点击后可将该尺寸设定为默认尺寸。
  • 最后一项菜单为自定义尺寸,可将当前浮动窗口的尺寸保存在该菜单中。
  • 加入过滤设置,避免在一些非视频 Flash 上显示按钮。
  • 单击背景关闭浮动视频默认改为双击。
  • 开放更多设置项及对原有设置的修改。
  • 其他一些小更新。

已知问题:若视频是在 iframe 中,则浮动窗口可能会有显示问题。

详细介绍及下载请转至:用脚本放大 Flash 视频

How to Enter and Scale Out of an ES Emini Trade
cartola fc Music that speaks street language is really for the young generation

Premium Fashion Wear for Petite Women and Men
ddtank And she played piano

A Lot More Than A Beautiful Dwarf Citrus Tree
click jogos all clothing flaunted huge logos

How to Wear a Shoulder Wrap
gay porn At least most of them

The progress of suits in the last 10 years
free porn sites East and Southeast

The Truth About UV Clothing Page 1 of 2
rape porn rise in profits YOY

All To Know About Tailored Suits
large porn tube Each episode seems to introduce more characters

Risks Involved In Tattoo Making
quick weight loss daguerreotype shots the outdated plan

UserJS 语法介绍

Opera 的脚本实现

Opera 浏览器提供了 6 个用户脚本级的调用方法(Method)和 13 个事件(Event)以及一个关键的对象(被称为 UserJSEvent 对象),来方便开发者编写用户脚本。除此之外,由于用户脚本被应用以后,其便成为所浏览网页的一部分,其同时也可以像正常的网页脚本一样,调用所有符合 W3C DOM 标准的方法和事件。

window.opera.addEventListener

在网页脚本中,通过 window.addEventListener 调用,我们可以设置常规的监听函数。同理,我们可以通过 window.opera.addEventListener 设置用户脚本级别的事件监听。同时,其回调函数的编写方法,与常规的网页脚本没有区别。要注意的是,用于监听的回调函数必须定义一个参数,用于事件对象的传递,这个对象被称为UserJSEvent 对象。通过此事件对象,用户脚本得以完成其特殊功能。

下面,向你介绍功能独特的用户脚本事件。

BeforeExternalScript

在 Opera 加载 HTML 页面时,当遇到带有 src 属性的 script 元素时触发。与此 script 元素对应的 DOM 对象,可以通过回调传参(UserJSEvent 对象)中的 element 属性获得。通过在事件处理中获得的 DOM 对象,你可以取消相应 js 文件的加载。而如果 js 被取消了加载,则不会载入外部资源且脚本元素不会被执行;同时,其相关的后续 BeforeScript 事件也不会被触发。

示例:

window.opera.addEventListener(
    "BeforeExternalScript",
    function (e) {
        if( e.element.getAttribute("src").match(/problem\/script\.js$/) ) {
            e.preventDefault();
        }
    }, false
);

BeforeScript

在 script 元素被解释执行前触发,这里的 script 包括网页中的 script 标记块,和外部引用的 script 文件。与此 script 元素对应的 DOM 对象,可以通过回调传参(UserJSEvent 对象)中的 element 属性获得。而 script 标记的内容,则可以通过 DOM 对象的 text 属性获得。并且,这个属性的值是可以修改的。你可以通过修改 text 属性的值,达到修改网页脚本的目的。或者,你还可以通过 UserJSEvent 对象的 preventDefault 方法,阻止此 script 被 Opera 解释执行。

另外,即使是 VBScript 脚本块,同样也会触发 BeforeScript 事件,只是 Opera 不会执行此类的脚本。

示例:

window.opera.addEventListener(
    "BeforeScript",
    function (e) {
        e.element.text = e.element.text.replace(/!=\s*null/, "");
    }, false
);

AfterScript

在 script 元素被解释执行后触发,其它细节同上。

BeforeEvent

在某个 DOM 事件被触发之前触发,而不管此事件是否已经被所在网页设置了处理函数。与此事件对应的 DOM 事件,可以通过回调传参(UserJSEvent 对象)中的 event 属性获得。你可以通过 UserJSEvent 对象的 preventDefault 方法,阻止此事件的触发。而如果此事件被阻止触发,则其默认动作将被执行,同时与其相关的所有 BeforeEventListener 事件都不会被触发。

BeforeEvent.type

和 BeforeEvent 一样,但只针对 type 所指定的事件。例如,我们可以监听 BeforeEvent.click 事件,那么只有 click 类型的事件,才会触发监听函数。同时,如果既监听了 BeforeEvent,又监听了 BeforeEvent.type,则二者都会被触发。

需要说明的是,在实际的使用过中,我们一般会有针对性地编写 BeforeEvent.type 事件监听,而不会简单地使用 BeforeEvent。因为 BeforeEvent 会触发大量的事件行为,极其影响性能,所以最好不要对这个事件编写处理代码。

示例:

window.opera.addEventListener(
    "BeforeEvent.click",
    function (e) {
        e.preventDefault();
    }, false
);

AfterEvent

在某个 DOM 事件触发并执行处理函数之后(不管所在网页是否定义了处理函数),但在此事件的默认动作被执行之前。与此事件对应的 DOM 事件,可以通过回调传参(UserJSEvent 对象)中的 event 属性获得。如果网页中的处理函数截获了这个事件,并试图阻止此事件的默认动作发生。那么,可以通过 UserJSEvent 对象的 eventCancelled 属性检测出来。同时,当调用 UserJSEvent 对象的 preventDefault 方法时,网页处理函数的任何阻止都将被忽略。

AfterEvent.type

和 AfterEvent 一样,但只针对 type 所指定的事件。例如,我们可以监听 AfterEvent.click 事件,那么只有 click 类型的事件,才会触发监听函数。同时,如果既监听了 AfterEvent,又监听了 AfterEvent.type,则二者都会被触发。

需要说明的是,在实际的使用过中,我们一般会有针对性地编写 AfterEvent.type 事件监听,而不会简单地使用 AfterEvent。因为 AfterEvent 会触发大量的事件行为,极其影响性能,所以最好不要对这个事件编写处理代码。

示例:

window.opera.addEventListener(
    "AfterEvent.click",
    function (e) {
        if( e.eventCancelled ) {
            e.preventDefault();
        }
    }, false
);

BeforeEventListener

在某个 DOM 事件被网页中的 addEventListener 方法进行监听之前触发。与此事件对应的 DOM 事件,可以通过回调传参(UserJSEvent 对象)中的 event 属性获得。而将被调用的监听函数,则可以通过 UserJSEvent 对象的 listener 属性获得。你可以通过 UserJSEvent 对象的 preventDefault 方法,阻止此事件的触发。而如果此事件被阻止触发,则网页中的 addEventListener 调用将被忽略。

BeforeEventListener.type

和 BeforeEventListener 一样,但只针对 type 所指定的事件。例如,我们可以监听 BeforeEventListener.click 事件,那么只有 click 类型的事件,才会触发监听函数。同时,如果既监听了 BeforeEventListener,又监听了 BeforeEventListener.type,则二者都会被触发。

需要说明的是,在实际的使用过中,我们一般会有针对性地编写 BeforeEventListener.type 事件监听,而不会简单地使用 BeforeEventListener。因为 BeforeEventListener 会触发大量的事件行为,极其影响性能,所以最好不要对这个事件编写处理代码。

示例:

window.opera.addEventListener(
    "BeforeEventListener.click",
    function (e) {
        e.preventDefault();
    }, false
);

AfterEventListener

在某个 DOM 事件被网页中的 addEventListener 方法进行监听之后触发。与此事件对应的 DOM 事件,可以通过回调传参(UserJSEvent 对象)中的 event 属性获得。而被调用的监听函数,则可以通过 UserJSEvent 对象的 listener 属性获得。如果网页中的监听函数截获了这个事件,并试图阻止此事件的继续传播。那么,可以通过 UserJSEvent 对象的 propagationStopped 属性检测出来。同时,当调用 UserJSEvent 对象的 preventDefault 方法时,网页监听函数的传播阻止行为将被忽略。

AfterEventListener.type

和 AfterEventListener 一样,但只针对 type 所指定的事件。例如,我们可以监听 AfterEventListener.click 事件,那么只有 click 类型的事件,才会触发监听函数。同时,如果既监听了 AfterEventListener,又监听了 AfterEventListener.type,则二者都会被触发。

示例:

window.opera.addEventListener(
    "AfterEventListener.click",
    function (e) {
        if (e.propagationStopped) {
            e.preventDefault();
        }
    }, false
);

BeforeJavascriptURL

在 JavaScript 伪链接被执行之前触发。将被执行的 JavaScript 代码,可以通过回调传参(UserJSEvent 对象)中的 source 属性获得。并且,这个属性的值是可修改的。你可以通过修改 source 属性的值,达到修改网页脚本的目的。或者,你还可以通过 UserJSEvent 对象的 preventDefault 方法,阻止所在 JavaScript 代码的执行。

示例:

window.opera.addEventListener(
    "BeforeJavascriptURL",
    function (e) {
        // we can modify the JavaScript code by following
        e.source = ...
    }, false
);

AfterJavascriptURL

在 JavaScript 伪链接被执行之后触发。已经被执行的 JavaScript 代码,可以通过回调传参(UserJSEvent 对象)中的 source 属性获得。而所执行代码的返回值,可以通过 UserJSEvent 对象的 returnValue 属性获得。并且,这个属性的值是可修改的。或者,你还可以通过 UserJSEvent 对象的 preventDefault 方法,阻止 returnValue 的属性值被 Opera 当做新的 HTML 源代码进行显示。要注意的是,这个事件会被触发,当且仅当链接脚本执行成功。

示例:

window.opera.addEventListener(
    "AfterJavascriptURL",
    function (e) {
        // we can use e.returnValue to judge what to do.
        // and then, use e.preventDefault to prevent default behavior
        ...
    }, false
);

PluginInitialized

在插件(如 mediaplayer、flash、quicktime 等)初始化完成后触发。

window.opera.addEventListener(
    "PluginInitialized",
    function (e) {
        // we can do something after plugin initialized.
        ...
    }, false
);

BeforeCSS

  • 在 CSS 样式表被解析之前触发。
  • 触发该用户脚本事件的元素,可以是 HTML 文档中的 style 元素或引用外部样式表的 link 元素。这些元素用多种方式导入样式规则,如用 <style> 标签内嵌样式文本或导入外部样式文本,也可以用带有外部样式表 url 的 link 占位元素引入样式表(同时该元素还可以带有 media 及其他属性)。
  • 该事件有一个可读写的 cssText 属性,重写这个属性,可以更改样式表内容:
    opera.addEventListener('BeforeCSS', function(userJSEvent){
      userJSEvent.cssText = userJSEvent.cssText
        .replace(/-(moz|ms|webkit|o)-(border|text-overflow)/g,'$2')
        .replace(/-(moz|ms|webkit)-(gradient|transform|transition)/g,'-o-$2');
    }, false);
  • 该事件可取消浏览器对样式表的解析,从而使得该样式表不起作用:
    opera.addEventListener('BeforeCSS', function(userJSEvent){
    	userJSEvent.preventDefault();
    }, false);
  • 如果没有取消样式表的解析,那么对样式表内容的修改,也将应用到页面上。

AfterCSS

  • 如果各自对应的 BeforeCSS 事件没有取消样式表解析,那么 AfterCSS 事件在样式表解析后立刻触发。
  • 触发该用户脚本事件的元素,可以是 HTML 文档中的 style 元素或引用外部样式表的 link 元素。这些元素用多种方式导入样式规则,如用 <style> 标签内嵌样式文本或导入外部样式文本,也可以用带有外部样式表 url 的 link 占位元素引入样式表(同时该元素还可以带有 media 及其他属性)。
  • 该事件拥有一个可读写的 cssText 属性,用于访问样式表内容。
  • 修改 cssText 属性,可将更改后的样式重新应用到页面,并触发一个新的 BeforeCSS 事件。

UserJSEvent 对象

在上面的解释过程中,我们经常可以看到 UserJSEvent 对象,这个对象是通过 window.opera.addEventListener 设置监听函数时,监听函数必须定义的传入参数。当上面列举的任意事件被触发时,用户脚本事件的上下文对象 UserJSEvent,便会被传入相应的监听函数。而监听函数就可以利用这个特殊对象,做进一步的处理。

下面,将列举出 UserJSEvent 的成员。而其下各种属性的值,在不同的情况下,表现不同。

属性 类型 其他
bubbles boolean
cancelBubble boolean
cancelable boolean
currentTarget object [object Opera]
element object 只读:支持大部分常用的 DOM 方法,例如 getAttribute 和 setAttribute。可用于 BeforeExternalScript、BeforeScript 和 AfterScript 事件中。
element.text string 读写:script 标记中将被执行的 JS 代码。可用于 BeforeScript 和 AfterScript 事件中。在 User JS 中,element.text 不受同源策略的限制,无论 script 引用的 JS 来自哪里,都可以读取。
event object 只读:标准的 event 对象。可用于 BeforeScript 和 AfterScript 事件中。
eventCancelled boolean 只读:如果事件处理函数将事件取消了则为 true,否则为 false。可用于 AfterScript 事件中。
eventPhase number
initEvent function function initEvent() { [native code] }
listener function 只读:事件处理函数的引用。可用于 BeforeEventListener 和 AfterEventListener 事件中。
returnValue undefined 只读:JavascriptURL 的返回值。可用于 AfterJavascriptURL 事件中。
source undefined 只读:JavascriptURL 的源码。可用于 BeforeJavascriptURL 和 AfterJavascriptURL 事件中。
srcElement object [object Opera]
stopPropagation function function stopPropagation() { [native code] }
target object [object Opera]
timeStamp number
type string 只读:当前事件的类型,如:BeforeScript、BeforeJavascriptURL。可用于所有的事件中。
preventDefault function 只读:阻止默认行为,如:阻止脚本运行或者阻止事件处理函数的执行。可用于所有事件中,但在 AfterScript 事件中使用是没有效果的,因为脚本已经被执行了。
propagationStopped boolean 只读:如果事件处理函数使事件停止传播则为 true,否则为 false。可用于 AfterScript 事件中。

window.opera.scriptStorage

该属性会返回一个 Storage 对象(该对象由 W3C Web Storage API 定义),并且此返回对象在每个用户脚本中相互独立。在用户脚本中可使用此对象来实现跨域间的存储共享。此对象现阶段还不能响应 storage 的各事件。window.opera.scriptStorage 属性现在只能在 Opera Presto 2.6 渲染引擎上可用。关于更多的信息,请查阅此文章:eWeb specifications support in Opera Presto 2.6: Web Storage

scriptStorage 只能由用户脚本的主体代码直接调用,其他地方,如以各种方式调用的以 “javascript:” 开头的 js 代码、由事件驱动的 js 代码、外部引用的以及自行创建的 <script> 标签内的代码等,都不能直接访问 opera.scriptStorage。如果要将 scriptStorage 用于事件驱动的 js 代码中,请在主体代码中传递一个引用过去,如下面代码:

function(opera, storage)
	{
		window.addEventListener(
			'DOMContentLoaded',
			function (e){
				alert(storage);
			},false
		);
	}
)(opera, opera.scriptStorage);

要使用 scriptStorage 对象,必须打开对其所作的限制。在 opera:config#PersistentStorage|UserJSStorageQuota 中,如果设置为 0 ,那么 scriptStorage 将不可用,而大于 0 的其他数,则表示可使用的存储大小,单位为 kB。要查看由 scriptStorage 创建的信息,请打开 opera:webstorage 页面。

window.opera.removeEventListener

用于取消 window.opera.addEventListener 设置的事件监听。

window.opera.defineMagicVariable

此方法用于覆盖网页中定义的全局变量。它的工作原理是,在网页代码试图读取或设置指定全局变量值的时候,加入了中间处理层。通过加入的中间处理层,开发人员得以完成一些特殊的逻辑处理。 调用格式及参数

window.opera.defineMagicVariable(
    targetVariableName,
    function (currentVal) {
        // do what you want to when getting
        ...
    },
    function (newVal) {
        // do what you want to when setting
        ...
    }
);
属性 类型 其他
targetVariableName string 指定被覆盖的变量名称;
function (currentVal) { } function 回调函数。当有代码试图访问被覆盖的变量时,其传入参数(currentVal)的值,为所覆盖变量的当前值;而此回调函数的返回值将被当做变量的当前值处理。
function (newVal) { } function 回调函数,可选。设置为 null 时,表示不使用。当有代码试图向此变量赋值时,此函数将被执行,传入参数(newVal)的值为所赋的值,而返回值为实际赋到变量上的值。

window.opera.defineMagicFunction

当网页中的某个函数,不符合某种功能要求时,我们可以通过此方法,将其替换成我们想要完成的功能。 调用格式及参数

window.opera.defineMagicFunction(
    targetFunctionName,
    function(originalFunctin, oThis, oParam1, oParam2) {
 
    }
);
属性 类型 其他
targetFunctionName string 指定被覆盖的函数名称;
function(originalFunctin, oThis, oParam1, oParam2) { } function 自定义函数,用来覆盖原来的函数;
originalFunctin function 被覆盖函数原来的对象;
oThis object 前函数的上下文对象;
oParam1, oParam2 various 被覆盖函数原来的传入参数表;

window.opera.setOverrideHistoryNavigationMode

解释同下

window.opera.getOverrideHistoryNavigationMode

Opera 默认支持从浏览器的缓存中读取前进及后退的网页请求。但这样做,带来了一个不好的后果,因为有一些网页会在 load 和 unload 时,做一些脚本操作。比如,在 load 时初始化网页的界面,或是在 unload 时,提示用户“是否离开当前页面”。但有时 Opera 检测不到这种脚本动作,因而会造成前进及后退时,网页状态不正确。为解决这一问题,Opera 提供了“历史导航模式”的特性,即通过这一设置,可以改善网页加载及卸载时的问题。

这个“历史导航模式”可以被设置成 3 种值,分别是:automatic, compatible, 或 fast。我们可以通过 opera:config 来完成设置,也可以通过网页脚本自身的 history.navigationMode 属性来完成,还可以通过当前段落所解释的这两个方法来完成。

编写综述

编写用户脚本,实际上是一个 Hack 网页代码及脚本的过程。通过在网页已经提供代码及功能的基础上,修修补补,完成自己想要做的事情。那么,你得有一个相应的工具,来满足你查看网页“微观世界”的想法。Opera 提供了 DragonFly,一个可以满足你调试网页结构,查看网页元素样式,以及实时调试 JavaScript 代码的工具。通过这个工具,再加上 Opera 用户脚本这一特性,你可以对你浏览到的网页,做任何你想做的“手术”。

许多情况下,我们都是通过改写网页的 JavaScript 代码来 Hack 网页功能的。那么,从上至下,你可以看到如下的一个可操作顺序。

  1. 通过 defineMagicFunction 方法,覆盖网页函数为自定义函数;
  2. ?通过监听 BeforeScript 事件,直接改写函数中的 JavaScript 代码;
  3. ?通过 defineMagicVariable 方法,覆盖网页全局变量,间接地影响代码的处理;
  4. ?通过监听 BeforeEvent.type 事件,在某个事件触发前,加入一些逻辑处理;
  5. ?通过监听 BeforeJavascriptURL 事件,更改脚本链接的运行逻辑;
  6. ?另外,如果我们想加入一些功能,我们还可以像网页脚本一样,对网页事件进行监听并处理。比如,下面的代码即为监听 DOM 的内容被加载后触发。
indow.addEventListener(
    "DOMContentLoaded",
    function(e) {
        // we can add our logic following
        ...
    }, false
);

编写用户脚本是一件很有意思的事情,因为挑战自己,在针尖上跳舞,未尝不是计算机科学经常面对的。也许你想变得更 Geek,那么就从 Hack 并“篡改”别人的网页代码开始吧! 🙂

如何使用 UserJS

什么是 UserJS?

UserJS 是 User Javascript 的简称,即用户脚本。所谓脚本,就是运行于客户机上的一段程序,可以帮助用户完成特定的任务。
当用户浏览网页时,会从服务器上下载脚本,并在本地运行,这种脚本我们会称之为网页脚本。与网页脚本不同的,用户脚本本身就在客户机上,不需要下载,而且如果不对其做限制,可用在所有网页上。
一般用户脚本是扩展名为 .js 的文本文件,如果是 GM 脚本,那么名字的后缀必须是 .user.js 。

UserJS 能做什么?

通过编写用户脚本,可以很大程度上提高上网体验,也可以省去一系列上网时的繁琐操作。对于不规范的网站,还可以编写用户脚本对其进行修复。
举些例子,使用 UserJS 可以实现网页自动翻页、文字翻译、页面预读、看图增强等等有用、有趣功能。UserJS 本身灵活多变,但毕竟只是一个工具,最重要还得看你的想象力^ ^

UserJS 不能做什么?

UserJS 虽然很自由很强大,但出于安全性原因,UserJS 不能操作文件,不能操作剪贴板,不能跨域访问。

UserJS 怎么获得?

有能力的朋友可以自行编写脚本。而对于普通用户,可以在一些网站上获得,比如 extendopera.org,甚至火狐 GM 脚本库里的一些脚本也能用于 Opera 中。
如果找到的脚本是以代码形式给出,比如下面这段代码:

// ==UserScript==
// @include http://www.hiapk.com/bbs/*
// ==/UserScript==
 
window.opera.defineMagicVariable('announcementScroll', function () { return 0; }, null );

那么可以自行新建一个扩展名为 .js 的文本文件(如果是 GM 脚本,还必须是以 .user.js 为后缀),然后将此段代码粘贴进去,并以 utf-8 without BOM 编码保存。

UserJS 怎么使用?

全局使用

我们可以在磁盘任何地方新建一个文件夹,为了管理方便,我们将文件夹建在opera程序目录里,比如 D:\Opera10.5\profile\script。然后我们在 Opera 中指定。选中菜单的“工具”、“首选项”(在 Opera 10.5 中,是左上角红色按钮的“设置”、“首选项”)打开首选项对话框,在“高级”、“内容”中允许“使用 Javascript”,并在“Javascript 选项”中设置 Javascript 文件夹,如下图(假定 Javascript 文件夹是 D:\Opera10.5\profile\script),然后将脚本放进这个目录里就能使用了。

特殊网页单独使用

对于一些特殊网页要单独使用用户脚本的,可以在站点首选项里进行设置,该设置优先权高于全局。可在特殊网页上点击右键,或者在菜单“工具”、“快速参数”(在 Opera 中,点击左上角菜单按钮,选中“设置”、“快速参数”)中选中“编辑站点首选项”,打开站点首选项对话框后,在“脚本”面板中勾选“允许使用 Javascript”,并指定 Javascript 文件夹,如下图,然后将脚本放进这个文件夹内即可:

注:无论是全局还是单独设置,Javascript 文件夹都可设置多个,用逗号进行分隔,比如
D:\Opera\profile\script\1,D:\Opera\profile\script\2

使用地址栏或 Opera 命令调用 UserJS

对于一些脚本可能需要通过人们手动开启执行,可在地址栏中敲入以 javascript: 开头的字串,冒号后面的内容根据脚本的不同而具体编写。对于这种开启方式,UserJS 作者一般会给出按钮或菜单,只要点击即可,不再需要在地址栏中敲入代码。Opera 命令一般可以是 Go to page, “javascript: xxxx”。

Opera 如何使用火狐的 GM 脚本

现在的脚本越来越趋于标准化,一些 GM 脚本也能用在 Opera 中。在 Opera 中使用 GM 脚本,文件全名必须以 .user.js 结尾,然后放入到相应的 Javascript 文件夹中即可使用。

你在使用 UserJS 时可能会遇到的问题

说明

由于每个网站的结构大都不相同,加上网页也经常进行改版调整,脚本使用不当可能会造成一些问题(页面排版错乱甚至严重的可能会导致 opera 崩溃或无法响应),因此用户使用脚本时最好先确认脚本是可靠稳定的,并及时更新脚本。 另外,不同脚本间也可能会造成冲突,使用前请先了解脚本的功能及作用范围。

我的 UserJS 为何无效?

首选确认你所获得的 UserJS 是可用的,你可以向脚本的作者或他人询问相关信息,在脚本确实可用的情况下,请检查脚本文件的编码格式,如果脚本内包含了非 ASCII 字符,如中文汉字,此时使用 ANSI 编码会导致脚本失效,你可以将脚本保存为 UTF-8 编码格式。推荐使用 Windows 自带之外的第三方编辑器保存脚本为 UTF-8 without BOM 格式。

如何对 UserJS 设置黑白名单?

白名单即脚本可起作用的网站列表,相反,黑名单即脚本不起作用的网站列表。设置黑白名单可以有效防止脚本可能会带来的问题,因此黑白名单作用非常大。
我们可以在脚本的开头写入下面代码:

// ==UserScript==
// @include http://xxx.xxx.xxx/*
// @exclude http://zzz.zzz.zzz/*
// ==/UserScript==

其中以 include 标注的即白名单,exclude的为黑名单,可以设置多条。

为什么我的黑白名单无效?

Windows 自带的记事本保存的 UTF-8 为 UTF-8 with BOM,此时会导致黑白名单失效,请使用其他编辑器保存脚本为 UTF-8 without BOM 格式。

为什么我用 UserJS 控制不了前/后台打开标签?

Opera 默认没有打开控制标签前/后台的开关,你可以在“首选项”、“高级”、“内容”里点开“Javascript 选项”,将相应的“允许将窗口提到最前”或“允许将窗口提到最后”勾上。

用脚本放大 Flash 视频

你们是否遇到过 flash 视频过小,全屏不清晰,正常播放又看着累的情况?是否遇到过忍受不了了就钻进源码里找 flash 代码然后单独新开标签播放的情况?如果你对此感到厌烦了,那么或许这个小小的脚本能帮到你。当然,总受是不在谈论范围内的 (;¬_¬)

脚本下载:PopupFlash.zip (v1.1.6)
历史版本下载:Popup Flash(历史版本).zip
注:Firefox、Opera 15+、Chrome 使用时需要将扩展名改成 .user.js。
UserJS 的使用方法不另外详述,请自行阅读 UserJS – Opera.im
注2:Opera 15+、Chrome 只做最低限度的支持,无法不重载就弹出视频,也无法动态保存自定义尺寸,暂时未找到解决方法。

好吧,下面开始介绍,看图说话好了。


当鼠标悬停在视频时,在视频的左上角会出现个按钮。


点击按钮后,视频将会被放大,在屏幕居中显示,并且背景变为半透明黑色。


在浮动的视频窗口边缘,上下左右以及角落处都可以拖动改变视频窗口的大小。鼠标悬停在左上角的设置按钮上时,会弹出一个菜单,菜单为预置(或自定义)的尺寸列表。每个菜单项后面都会有个大头针图标,可将对应的视频尺寸设置为默认尺寸。而最后一项是自定义项,后面跟着一个保存按钮,可将当前视频窗口的尺寸记录到该菜单中。

主要的功能介绍如上所述,除此之外,脚本还开放了如下设置:

// 悬停在视频上的按钮尺寸,单位为像素
var POPUP_ICON_SIZE = 26;
 
// 无保存值时,浮动的 FLASH 的默认尺寸,默认长和宽为浏览器页面大小的 70%
var POPUP_FLASH_SIZE = 70;
 
// 浮动 FLASH 的最小宽度,单位为像素
var POPUP_FLASH_MIN_WIDTH = 640;
 
// 浮动 FLASH 的最小高度,单位为像素
var POPUP_FLASH_MIN_HEIGHT = 480;
 
// 出现在菜单上的尺寸列表,name 是列表项文字,width 是宽度,height 是高度。单位是像素。
// 注:width 与 height 任意一值超过可视页面的宽/高时,则该菜单不显示
var POPUP_FLASH_SIZE_LIST =
[
	{name: '初始默认值', width: 0, height: 0}, // 此项为第一位且不删除
	{name: '800 x 600', width: 800, height: 600},
	{name: '854 x 480 [宽]', width: 854, height: 480},
	{name: '1024 x 768', width: 1024, height: 768},
	{name: '1280 x 720 [宽]', width: 1280, height: 720},
];
 
// 黑色背景的不透明度,0 为全透,1 为不透
var BACKGROUND_OPACITY = 0.8;
 
// 拖拽边缘调整尺寸时,在何处显示尺寸大小
// 可选值:title、statusbar、both、disable(分别代表“标题栏”、“状态栏”、“标题栏和状态栏”以及“不显示”)
// 注:Opera 的 JavaScript 选项中必须勾选“允许更改状态域”才能使状态栏的修改生效。
var SHOW_RESIZE_INFO = 'both';
 
// 点击背景关闭浮动的 FLASH,可选值:"NONE_CLICK"、"CLICK"、"DOUBLE_CLICK"
var CLICK_BLANK_TO_CLOSE = 'CLICK';
 
// 白名单列表,判断时优先级最高,只要出现该关键字就认为是视频
// 可设置多个,用逗号分隔,使用小写
// 规则:如果 flash 代码的 id、class、name、src、data、flashvars 任一属性中出现下列关键词,则认为是视频
var WHITE_LIST_KEYWORD_IMPORTANT = ['ytimg'];
 
// 白名单列表,优先级最低,如果在黑名单中已经排除,那么即使在白名单内也有相关关键字,也不会认为是视频
var WHITE_LIST_KEYWORD = ['player', 'video', 'tudou.com', 'viddler', 'youtube'];
 
// 黑名单列表,可设置多个,用逗号分割,使用小写
// 如果 flash 代码的 id、class、name、src、data、flashvars 任一属性中出现下列关键词,则认为不是视频
// 注:可将没有通用关键词的网站域名列入关键词内,如 xiami.com。同一个关键词在黑白名单都出现时,优先黑名单。
var BLACK_LIST_KEYWORD = ['mp3', 'music', 'xiami.com', 'adplayer'];
 
// 尺寸过滤,如果宽与高都小于下面的值,则认为不是视频。单位为像素。
var FLASH_SIZE_FILTER = {width: 320, height: 240};
 
// 拖动窗口时,该值越大,占用 CPU 越小,但同时也越不平滑。
var PLAYER_MOUSE_MOVE_FILTER = 2;
Natural Beauty Tips for Pimples
ddtank do not try to glue it back

The Worst Apple Options Trade You Can Make
ebay kleinanzeigen 5 Upcoming Remakes of 80s Movies That Must Be Stopped

4 Top Selling UGG Boots and Shoes
gay porn ruskies housewives invade partially

The Growing Popularity Of Plus Size Fashion
xvideos Can you make it something as like

com teaches you how to take care of turquoise jewelry
free gay porn purchasing for of numerous materials . clothing fashion assortment along with men attires around the

The Top 10 Spring Fashions
hd porn jeans fashion accessory

ValueVision Q2 2009 Earnings Call Transcript
quick weight loss In the bachelor’s program

Information When Shopping for Burberry Handbags
snooki weight loss said Zara as

Google+ Injector,让 Opera 显示 Google+ 信息通知

Google+ 推出的后,一如 Google 以往的风格,新服务对 Opera 会有各种各样的问题。
Opera 访问 G+ 则是无法显示右上角的头像和信息通知、分享按钮。

这次光是伪装成 FX 还不行,能显示两个按钮,但是点击后依然提示“您的浏览器配置不受支持。”
这是在 js 中通过 window.opera 进行判断的,所以改 UA 无用。

现在,通过 Google+ Injector 扩展,加载缺少的代码,可以修复这个问题。
启用前后的对比:
Google+ Injector
名称:Google+ Injector
作者:XP1
介绍:Injects the missing CSS, HTML, and JavaScript code into Google+, which will show the web toolbar buttons and may, by the addition of more JavaScript, increase usability or the number of features.
扩展链接:https://addons.opera.com/addons/extensions/details/google-injector/
项目地址:https://github.com/XP1/Google–for-Opera
详尽的说明请见:Google+’s Missing Code for Opera

虽然也有提供 User JS 版本,但因为 Google+ 是 https 的,建议使用扩展。
需要注意的是,如果你之前修改了浏览器识别,那么请在站点首选项中间改回识别为 Opera,否则扩展不能正常工作。

如果你还没有 Google+ 账户,点此加入,并圈我

Details about the Press Release
youjizz The clothes were shown by trends like

Retailers’ October 2008 Sales Roundup
free hd porn Models were from age 13 and up

Business Skills For Careers In The Fashion Industry
free hd porn past few months set of clothes point performace 2

Mila Kunis Called Worst Dressed by
anime porn The secret here is to accentuate your best features with a suggestion

Mattel Management Discusses Q1 2013 Results
large porn tube Every room also includes a coffee maker

Where to shop and what to buy in Rome
hd porn spring and fall season

How Much Does Tyra Banks Weigh
miranda lambert weight loss how to share fraudulent armani transactions

Precious stone’s prices going down with increase its availability
christina aguilera weight loss under your arms and connect it at the back