fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
阅读:5964回复:12

Greasemonkey 2.0 发布,可能会导致部分脚本失效

楼主#
更多 发布于:2014-06-19 10:25
https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/versions/
http://www.greasespot.net/

官方主页已发布,AMO上面还没审核通过,大家可以提前下载。其中有两个很大的变化,可能会导致部分脚本失效:
1、@grant 默认为 none,也就是脚本之前没有声明 @grant GM_xmlhttpRequest 之类的,默认都为 @grant none,如果你在脚本里面用到GM_xmlhttpRequest 之类都会失效。详见:https://greasyfork.org/forum/discussion/476/%E8%AF%B7%E5%8A%A0%E4%B8%8A-grant

2、unsafeWindow 不能直接使用,如果要访问 unsafewindow,必须使用 cloneInto(), exportFunction(), and/or createObjectIn() 这些 method,详见:
https://blog.mozilla.org/addons/2014/04/10/changes-to-unsafewindow-for-the-add-on-sdk/

Backwards incompatible changes:
  • For stability, reliability, and security the privileged sandbox has been updated to match the new changes to unsafeWindow for the Add-on SDK.  In order to write values to unsafeWindow you will need to use the new methods cloneInto(), exportFunction(), and/or createObjectIn().
  • The @grant none mode is now the default, and grants will no longer be implied when not explicitly provided.  See the post Sandbox API Changes in Greasemonkey 2.0 for more detail.
Firefox More than meets your experience
文科
千年狐狸
千年狐狸
  • UID39959
  • 注册日期2013-10-17
  • 最后登录2019-07-27
  • 发帖数2069
  • 经验1328枚
  • 威望4点
  • 贡献值340点
  • 好评度256点
  • 最爱沙发
  • 社区居民
  • 忠实会员
1楼#
发布于:2014-06-19 12:23
只希望脚本作者能即使更新脚本了,免到时候又是说脚本失效的
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
2楼#
发布于:2014-06-19 13:24
文科:只希望脚本作者能即使更新脚本了,免到时候又是说脚本失效的回到原帖
很多脚本年久失修没维护了。
Firefox More than meets your experience
文科
千年狐狸
千年狐狸
  • UID39959
  • 注册日期2013-10-17
  • 最后登录2019-07-27
  • 发帖数2069
  • 经验1328枚
  • 威望4点
  • 贡献值340点
  • 好评度256点
  • 最爱沙发
  • 社区居民
  • 忠实会员
3楼#
发布于:2014-06-19 13:54
fang5566:很多脚本年久失修没维护了。回到原帖
特别是uso的脚本 ╮( ̄▽ ̄")╭
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
4楼#
发布于:2014-06-19 14:25
unsafeWindow 好像可以直接使用,只是无法直接修改。

2.0 的 GM_xmlhttprequest 有一个明显的 bug,不知道作者什么时候修复。

先用 1.5 是最好的选择。
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
5楼#
发布于:2014-06-19 20:07
hzzhaiqi:unsafeWindow 好像可以直接使用,只是无法直接修改。

2.0 的 GM_xmlhttprequest 有一个明显的 bug,不知道作者什么时候修复。

先用 1.5 是最好的选择。
回到原帖
不能直接修改……
我这里有很多简单粗暴的猴子脚本要改了……
jiayiming
火狐狸
火狐狸
  • UID35865
  • 注册日期2011-04-04
  • 最后登录2024-05-18
  • 发帖数175
  • 经验182枚
  • 威望0点
  • 贡献值30点
  • 好评度5点
  • 社区居民
  • 忠实会员
6楼#
发布于:2014-06-19 23:34
.难道是scriptish nightly不能修改unsafewindow也是因为这个?我还以为只有scriptish有问题。。。
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
7楼#
发布于:2014-06-20 07:43
简单测试了下,对 Google 搜索去除跳转的修改

还是有效
window.addEventListener('load', function(){
    unsafeWindow.rwt = function() {};
}, false);
有效
try {
    Object.defineProperty(unsafeWindow, 'rwt', {
        value: function() { return ''; },
    });
} catch (e) {}

没明白哪里变了。。。。 求指点

添加下面代码,在控制台执行也能成功
unsafeWindow.mtest = function() {
    alert('hello, world');
};
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
8楼#
发布于:2014-06-20 16:32
aaaa007cn:不能直接修改……
我这里有很多简单粗暴的猴子脚本要改了……
回到原帖
仔细对比 Greasemonkey 1.5 和 2.0 的源码,对 unsafeWindow 并未有改变,还是同样的方法:
@grant none 直接是 window。

@grant none
sandbox.unsafeWindow = aContentWin.wrappedJSObject;
2.0 仅仅是增加了这3个方法:
// Functions for interaction with unsafeWindow; see: http://goo.gl/C8Au16
sandbox.createObjectIn = Cu.createObjectIn;
sandbox.cloneInto = Cu.cloneInto;
sandbox.exportFunction = Cu.exportFunction;
补充:上面的不正确。

原来我用的是 alice修改的临时可用版本,我还修改了下忽略 GM_httpRequest 的那个错误,http://bbs.kafan.cn/forum.php?mod=viewthread&tid=1747638&page=3#pid31777829

alice 修改了这个地方就让 unsafeWindow 跟以前一样。

图片:2014-06-20_181450.png

lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
9楼#
发布于:2014-06-20 23:44
hzzhaiqi:简单测试了下,对 Google 搜索去除跳转的修改

还是有效window.addEventListener('load', function(){
    unsafeWindow.rwt = function() {};
}, ...
回到原帖
脚本中
unsafeWindow.foo = { bar: 1 };
控制台中输出
console.log(foo.bar)
hzzhaiqi
火狐狸
火狐狸
  • UID30112
  • 注册日期2009-08-18
  • 最后登录2015-09-15
  • 发帖数279
  • 经验180枚
  • 威望1点
  • 贡献值44点
  • 好评度28点
10楼#
发布于:2014-06-21 00:16
lonely_8:脚本中
unsafeWindow.foo = { bar: 1 };
控制台中输出
console.log(foo.bar)
回到原帖
见我 8楼 的补充说明,我后来发现我用的是  alice 修改后的版本,unsafeWindow 跟以前一样。
aaaa007cn
千年狐狸
千年狐狸
  • UID23968
  • 注册日期2008-05-03
  • 最后登录2022-03-07
  • 发帖数1924
  • 经验1138枚
  • 威望1点
  • 贡献值232点
  • 好评度164点
11楼#
发布于:2014-06-24 20:26
翻了手边的猴子脚本
大多数都设置过 @grant
不过之前没有的
不改动的话也没关系
http://www.greasespot.net/2014/06/greasemonkey-20-release.html
Greasemonkey will only use explicit @grant metadata, it will no longer sniff for implicitly used APIs. (This change takes effect at install time.  Currently installed scripts will continue to function as normal until they are updated/edited/reinstalled.)


至于 unsafeWindow
好像是可以直接读,不可直接写?
cloneInto()、exportFunction()、createObjectIn() 也是有看没有懂
mozilla 那里说的是 addon 中的用法
油猴包装过之后又该怎么用?
我还是等 2.0 被正式放出来后再折腾好了
hzhbest
千年狐狸
千年狐狸
  • UID22640
  • 注册日期2008-01-15
  • 最后登录2017-04-06
  • 发帖数1763
  • 经验476枚
  • 威望3点
  • 贡献值414点
  • 好评度89点
  • 社区居民
  • 忠实会员
12楼#
发布于:2014-09-12 17:37
因为这个unsafeWindow的原因,网易右侧评论(http://userscripts-mirror.org/scripts/show/156627)失效了,我看不明官方说明是啥意思,完全不会改…………
游客

返回顶部