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版的时间都长。

  • 相关阅读:
    密码朋克的社会实验(一):开灯看暗网
    ThinkPHP5框架缺陷导致远程命令执行(POC整合帖)
    SQL基本注入演示
    从SQL注入到内网漫游
    业务逻辑漏洞探索之敏感信息泄露
    Web安全之XSS Platform搭建及使用实践
    iOS URL Schemes与漏洞的碰撞组合
    phpcms2008远程代码执行漏洞
    使用RSA加密在Python中逆向shell
    源码级调试的XNU内核
  • 原文地址:https://www.cnblogs.com/legendlee/p/2496653.html
Copyright © 2011-2022 走看看