2011-12-29 30 views
1

我想开始编写一个基本的Firefox插件,它允许正确显示降价文件。非HTML文件的Page-Mod

不幸的是,我甚至无法让这个过程的第一步工作。

我有一些基本的代码:

var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: [/.*.md/, /.*.markdown/], 
    contentScriptWhen: 'end', 
    contentScript: 'window.alert("Page opened");' 
}); 

但是打开此类文件时,本地或从服务器不会被触发。

即使使用简单的include: ['*'],除非我打开非HTML文件,否则在访问的每个页面上都会触发警报。

那么,如何尽可能地将文本文件或其他非HTML文件,获取其内容或写入新内容?

+1

内容脚本只会触发,所以不可能用这种方式来访问非HTML页面。 – canuckistani 2011-12-29 17:04:28

+0

我明白了。那么这是否意味着我无法使用插件完成此任务,或者有其他类型的脚本可以使用? – KonstantinK 2011-12-29 17:17:00

+0

我对如何解决这个问题有一个聪明的想法,我会在几个小时内对它进行测试并回复给您。 – canuckistani 2011-12-29 19:00:24

回答

2

这(有点冒险)的代码适合我。

Main.js:

var data = require("self").data; 
var tabs = require("tabs"); 

tabs.on('ready', function(tab) { 
    if (/\.(md|markdown)$/.test(tab.url)) { 
     console.log('got markdown!'); 

     // get the markdown content 
     require('request').Request({ 
      url: tab.url, 
      onComplete: function(response) { 
       var md = response.text; 
       var worker = tab.attach({ 
        contentScriptFile: [data.url('markdown.js'), data.url('preview.js')] 
       }); 

       worker.port.emit('init', {raw: response.text}); 
      } 
     }).get(); 
    } 
}); 

tabs.open('https://raw.github.com/canuckistani/open-in-c9-extension/master/README.md'); 

preview.js:

self.port.on('init', function(data) { 
    unsafeWindow.document.body.innerHTML = markdown.toHTML(data.raw); 
}); 

我在做什么是取在第二HTTP请求的原始文本降价,与markdown.js处理它,然后将其插入到页面中。这绝对是hacky位是第二个http请求。

这里有一个建设者工作示例:加载HTML文档时

https://builder.addons.mozilla.org/addon/1031582/latest/

+0

工程就像一个魅力。我永远不会想到这一点。非常感谢:-) – KonstantinK 2011-12-30 09:48:19

+0

虽然这是一个天真的实现。例如,这段代码对于像这样的页面会失败很多:https://github.com/canuckistani/Fatso/blob/master/README.md – canuckistani 2011-12-31 03:08:16

+0

是的,我注意到了。但除非有办法获得所请求文件的实际MIME类型,否则我没有办法解决这个问题。这就是为什么在插件中,我禁用了文件的默认转换,除非它们位于本地硬盘上。顺便说一句,如果你想看到你的代码片段:[我发布了初步版本](http://codefool.tumblr.com/post/15031277162/browser-addon-markdown-viewer)。 – KonstantinK 2011-12-31 09:24:00