zoukankan      html  css  js  c++  java
  • 使用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版的时间都长。

  • 相关阅读:
    压缩感知的由来
    VS2010自动崩溃问题
    随机过程好书推荐
    Kernel PCA
    稀疏性与L1范数
    豆瓣关于计算机视觉的书评及介绍
    压缩感知测量矩阵的研究现状(转)
    信号的功率谱、能量谱、频谱的区别(转)
    vc++ & matlab 换行符号
    arg min 的含义
  • 原文地址:https://www.cnblogs.com/legendlee/p/2496653.html
Copyright © 2011-2022 走看看