使用Firefox Jetpack SDK开发Firefox扩展时,判断脚本是否在iframe中的方法

最近遇到一个问题,手上有一个Chrome扩展,要移植到Firefox中。考察了一下发现Firefox新版本的扩展框架Jetpack跟Chrome扩展框架是比较相似的,于是着手移植。

但是Jetpack有一个非常怪异的现象。首先你的inject-script不光会在普通页面中执行,还会在iframe中执行,只要iframe的地址符合你之前设置的地址模式。而且,最怪异的是,用常规的判断是否iframe内部的方法,不管用,什么top===self,统统不管用。在网上查了半天,终于在StackOverflow中得到的答案,如下:

1 if (window.frames.length !== parent.frames.length) { 
2     // 在iframe中
3 } else {
4     // 不在iframe中
5 }

我至今也没明白这里是一个Jetpack的bug,还是有什么特殊的原因,或者我对js理解有误。不过常规方法我都试过,确实无法分辨是否在iframe中。

PS:还是想吐槽一下Jetpack的易用性。简单看了帮助之后,我发现调试Jetpack扩展,唯一的办法似乎就是改代码->关掉firefox->运行“cfx run”->试用功能并查看output->改代码。。。这个过程极其考验人类的耐心和你发现问题的敏锐,我都快被折磨的不行了,注意,扩展的插入脚本,在firebugs里面是看不到的,没法调试。后来我尝试在firefox扩展的安装目录中找到我的脚本直接修改,发现firefox竟然把所有的Jetpack扩展都压缩到了一个xpi文件里,然后启动的时候,不知道释放到了什么地方。。。最后专门去StackOverflow问了一下,发现adblockplus的开发者为了解决这个问题,自己开发了一个扩展叫autoinstall。

这样的易用性,比起Chrome的开发环境,确实差太远了。直观地说就是,我用来移植的时间,比我从头开发这款扩展Chrome版的时间都长。

转载于:https://www.cnblogs.com/legendlee/archive/2012/05/11/2496653.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值