30天爱上Opera之第十天:User JavaScript
Opera8引入一个叫做User JavaScript的新功能,它可以让用户对已有网站进行添加,移除,修复或者覆盖等。简单的说,它可以让Opera能够显示更多的网站,即使你不知道如何编写JavaScript。原文参考
你可能还记得第五天我们讨论了Opera的JavaScript的选项,那里有一个叫做“我的JavaScript文件”的空,当时我说了我还会讲得。为了履行承诺,今天我们讨论一下Opera8的另一个兼容特性。
你可能注意到过去几天里讨论了让Opera浏览所有网站的方方面面。首先我们看了适合窗口宽度 ,它能够简单的“修复”不能正常显示的网站。然后昨天我们看了ua.ini文件,它能让Opera伪装成鳖的浏览器从而修复更多的网站。
但是如果这些还不行呢?如果网站不能显示一些很cool的功能怎么办?或者一些超恶的网页设计者用办法屏蔽了Opera(不让用户代理嗅探)怎么办?
好了,你可以试着关掉JavaScript(通过F12关闭)。但是很多网站是需要JavaScript的。那你该怎么办呢?
答案就是“User JavaScript”。如果你还记得我们关于用户样式表单的讨论,你就会对用用户想要的替换作者原来的概念不陌生了。User JavaScript就是这样工作的。它可以在网站原来基础上替换或者添加东西。
如何学到更多关于User JavaScript的东西?
你的差劲的作者也不是JavaScript专家。事实上我自己还在学习这个很cool的新功能。我能做的就是让大家来讨论并提供信息,然后我给你提供一些已有的网站,他们会详细的讨论User JavaScript的使用。
- http://www.opera.com/support/tutorials/userjs/
- Opera官方的User JavaScript 教程
- http://people.opera.com/rijk/opera/userjs.html
- Rijk’s User JS 页面,包括一些例子和一些收集的User JavaScript files.
- http://virtuelvis.com/archives/javascript/index
- Arve Bersvendsen的 JavaScript技巧收集. Arve 也在做一个网站UserJS.org (建设中)
- http://nontroppo.org/wiki/UserJS
- Opera Wiki 上有很多Use JS的链接信息
- http://www.howtocreate.co.uk/operaStuff/userJavaScript.html
- HowToCreate上的User JS, 包括一些很不错的例子.
- http://www.scss.com.au/family/andrew/opera/userjs/
- Andrew Gregory的 User JS 页面
-
注意Opera的User JS类似于Firefox的Greasemonkey扩展(并且很多的Greasemonkey的脚本在Opera中同样工作,但是还有一些不同需要注意。)我收到评论说Firefox先有这个功能的,我承认是Firefox最先公布这个扩展的。然后,不像某些人,你没有看到Opera假装自己创新了一切。
-
User JavaScript 例子
-
下面的例子是客座Lee Harvey写的,如果你关心Opera新闻组的话应该很熟悉他。
-
这里我们不是提供教程,我们只是看一些几个例子。
测试
第一个例子里,我们创建一个User JavaScript 文件来更新Opera的状态栏。
- 用你喜欢的文本编辑器(比如Notepad)在你的User JavaScript 目录里创建一个新的文件,取名为Usingstatus.js。
- 第二步,把下面的脚本代码拷贝到你的status.js文件里:
window.status = \"User JavaScript is enabled\"; -
这一行JavaScript代码是让Opera的状态栏显示“User JavaScript 已启动”-对于调试很有用。
-
注意:因为这个例子不检查页面URL,代码会应用到所有Opera加载的页面-除了加密的(https协议)和Opera(opera协议)页面。当然,既然这个window.status 一开始就加载了,所以它很容易被后面的window.status 覆盖。
Shockwave.com
-
Shockwave.com提供了基于Macromedia Shockwave播放器的很好的游戏。当然,为了玩这些游戏,你必须安装Shockwave插件: http://sdc.shockwave.com/shockwave/download/download.cgi
-
不幸的是,Shockwave.com上的脚本检测不能在Opera中很好的工作。我们可以修复它!
-
- 用你喜欢的文本编辑器(比如Notepad或者TextEdit)在user JavaScript 目录下创建一个名为shockwave.js 文件。
- 第二步,把下面的代码拷贝到shockwave.js文件:
if (location.hostname == \"www.shockwave.com\") { document.addEventListener(\"load\", function() { if (!game) return; if (!game.url) return; for (var i=0; i<document.links.length; i++) { if (document.links[i].href != \"javascript:play(game)\") continue; document.links[i].removeAttribute(\"onClick\"); document.links[i].href = \"javascript:window.open('http://www.shockwave. com/contentPlay/download/popup_downloadprompt.jsp?returnurl=\" + escape(game.url) + \"&id=\" + game.keyword + \"&width=\" + game. winsize[0] + \"&height=\" + game.winsize[1] + \"&site=\" + game.site + \"', 'asw_d\" + (Math.floor(Math.random() * 100000)) + \"', 'width=336, height=215');void(0);\"; break; } }, false); }NOTES:
- 第一行保证脚本代码只在访问http://www.shockwave.com// 时才执行。
- 空的function 创建是用来定义事件监听document.onload 的。
- 前面空function下的几行是用来检查game 目标和game.url属性的(由Shockwave.com建立) 。
- 如果 game 目标找到, 所有的当然的链接都要扫描,查找特殊的惧色的“看电影”按钮,href是:javascript:play(film) 。
- 如果href 找到, 按钮的onclick 事件移除,href 属性设置为为所有相关信息新开窗口。 这些来自于
Happy gaming!
AtomFilms
AtomFilms.com网站提供提供很好的基于Macromedia Shockwave 播放器的小电影或者动画。幸运的是AtomFilms.com是Shockwave.com创建的,所以对Shockwave.com的修复同样适用。
- 还是用你喜欢的文本编辑器(比如Notepad,TextEdit)user JavaScript 目录下在创建atomfilms.js 的文件。
- 下一步,把下面的代码拷贝到:
if (location.hostname == \"www.atomfilms.com\") { document.addEventListener(\"load\", function() { if (!film) return; if (!film.url) return; for (var i=0; i<document.links.length; i++) { if (document.links[i].href != \"javascript:play(film)\") continue; document.links[i].removeAttribute(\"onClick\"); document.links[i].href = \"javascript:window.open('http://www.atomfilms. com/contentPlay/download/popup_downloadprompt.jsp?returnurl=\" + escape(film.url) + \"&id=\" + film.keyword + \"&width=\" + film. winsize[0] + \"&height=\" + film.winsize[1] + \"&site=\" + film.site + \"', 'asw_d\" + (Math.floor(Math.random() * 100000)) + \"', 'width=336, height=215');void(0);\"; break; } }, false); }注意:
- 第一行保证脚本代码只在访问http://www.atomfilms.com/ 时才执行。
- 空的function 创建是用来定义事件监听document.onload 的。
- 前面空function下的几行是用来检查game 目标和game.url属性的(由Shockwave.com建立) 。
- 如果 game 目标找到, 所有的当然的链接都要扫描,查找特殊的惧色的“看电影”按钮,href是:javascript:play(film) 。
- 如果href 找到, 按钮的onclick 事件移除,href 属性设置为为所有相关信息新开窗口。内容来自于: http://www.atomfilms.com/js/playfilm.js
做点玉米花好好看电影吧!
注意事项
在你编写user JavaScript 文件时,有一些相应的注意事项:
- User JavaScript 不能在加密页面加载(https协议)。
- User JavaScript 不能在Opera页面加载(opera协议)。
- 网站虽是都会改变代码。这样的话,你的User JavaScript 如何有依赖的话就会坏掉。作为一个好的程序习惯,使用之前确保目标,函数和变量的存在 。
- 确保在你的User JavaScript 文件的前面加入一些条件性的陈述或者@include/@exclude 目录,使它只对你需要的某些网站,文件夹,或者页面起作用。否则的话,很多User JavaScript 会破坏页面载入的。
- 如果你想在User JavaScript 加入非ASCII字符,忽略参考外部脚本文件src=”"属性的<script>块,确保在<script>加入charset=”" 属性。否则,用HTML输入,或者依照原是页面的编码。




