我在维基读到NoScript是开源http://en.wikipedia.org/wiki/NoScript,但在官方网站http://noscript.net/上,我找不到任何来源。所以我的问题是:在哪里找到来源?或者,有什么我不明白,源代码不可用吗?
答案 0 :(得分:18)
Firefox XPI格式不会阻止您简单地提取插件的内容来检查源代码。
虽然我找不到规范的公共存储库,但看起来有人系统地下载并提取了所有可用的XPI并从中创建了一个GitHub存储库。
https://github.com/avian2/noscript
如果你想自己做,XPI文件只是标准的ZIP文件,所以如果你想自己提取一个,你可以简单地指出一个提取程序。
以下是从命令行执行此操作的示例:
mkdir noscript_source
cd noscript_source
curl -LO https://addons.mozilla.org/firefox/downloads/file/219550/noscript_security_suite-2.6.6.8-fx+fn+sm.xpi
unzip noscript_security_suite-2.6.6.8-fx+fn+sm.xpi
这会产生一个如下所示的目录结构:
.
├── GPL.txt
├── META-INF
│ ├── manifest.mf
│ ├── zigbert.rsa
│ └── zigbert.sf
├── NoScript_License.txt
├── chrome
│ └── noscript.jar
├── chrome.manifest
├── components
│ └── noscriptService.js
├── defaults
│ └── preferences
│ └── noscript.js
├── install.rdf
├── mozilla.cfg
└── noscript_security_suite-2.6.6.8-fx+fn+sm.xpi
然后主代码位于chrome/noscript.jar
内。你可以提取它来获得构成插件大部分的JavaScript:
cd chrome/
unzip noscript.jar
这将产生主要的源代码树:
.
├── content
│ └── noscript
│ ├── ABE.g
│ ├── ABE.js
│ ├── ABELexer.js
│ ├── ABEParser.js
│ ├── ASPIdiocy.js
│ ├── ChannelReplacement.js
│ ├── ClearClickHandler.js
│ ├── ClearClickHandlerLegacy.js
│ ├── Cookie.js
│ ├── DNS.js
│ ├── DOM.js
│ ├── ExternalFilters.js
│ ├── FlashIdiocy.js
│ ├── HTTPS.js
│ ├── Lang.js
│ ├── NoScript_License.txt
│ ├── PlacesPrefs.js
│ ├── Plugins.js
│ ├── Policy.js
│ ├── Profiler.js
│ ├── Removal.js
│ ├── RequestWatchdog.js
│ ├── STS.js
│ ├── ScriptSurrogate.js
│ ├── Strings.js
│ ├── URIValidator.js
│ ├── about.xul
│ ├── antlr.js
│ ├── clearClick.js
│ ├── clearClick.xul
│ ├── frameOptErr.xhtml
│ ├── iaUI.js
│ ├── noscript.js
│ ├── noscript.xbl
│ ├── noscriptBM.js
│ ├── noscriptBMOverlay.xul
│ ├── noscriptOptions.js
│ ├── noscriptOptions.xul
│ ├── noscriptOverlay.js
│ ├── noscriptOverlay.xul
│ ├── options-mobile.xul
│ └── overlay-mobile.xul
├── locale
└── skin
答案 1 :(得分:14)
扩展程序包含源代码 - 您只需解压缩它即可。请参阅Giorgio's response here。
每个XPI中都公开了完整的源代码。
如果您是NoScript用户,那么您现在已经在硬盘上获得了它,否则您可以在此处下载。
您可以通过解压缩内部的XPI和JAR以及"构建"来检查和/或修改它。它通过重新拉链来恢复。
从第一个版本开始,它一直都是这样。