2011-12-29 2 views
1

Я пытаюсь начать писать базовый аддон Firefox, который позволяет корректно отображать файлы разметки.Page-Mod of non-HTML files

К сожалению, я даже не могу сделать первый шаг в работе.

У меня есть базовый код:

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

Но он не получает срабатывает при открытии такого файла, локально или с сервера.

Даже с простым include: ['*'] предупреждение запускается на каждой странице, которую я посещаю, за исключением случаев, когда я открываю не-HTML-файл.

Итак, как можно вообще можно настроить целевые текстовые файлы или другие файлы, отличные от HTML, получить их содержимое или написать в них новый контент?

+1

сценарии контента будут вызывать только тогда, когда HTML документ загружен, поэтому не представляется возможным получить доступ к не-HTML страницы таким образом. – canuckistani

+0

Вижу. Значит ли это, что я не могу сделать это с помощью надстройки вообще или есть другой тип сценария, который я мог бы использовать? – KonstantinK

+0

У меня есть умная идея о том, как обойти это, я проверю его и вернусь к вам через несколько часов. – canuckistani

ответ

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, затем вставьте его в страницу. Определенный хакерский бит - это второй HTTP-запрос.

Вот рабочий пример на строитель:

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

+0

Работает как шарм. Я бы никогда не подумал об этом. Большое спасибо :-) – KonstantinK

+0

Это наивная реализация. Например, этот код плохо сработает для такой страницы: https://github.com/canuckistani/Fatso/blob/master/README.md – canuckistani

+0

Да, я заметил. Но если есть способ получить фактический MIME-тип запрашиваемого файла, я не вижу способа обойти это. Вот почему в плагине я отключил преобразование файлов по умолчанию, если они не находятся на локальном жестком диске. Кстати, если вы хотите увидеть свой фрагмент в действии: [Я опубликовал предварительную версию] (http://codefool.tumblr.com/post/15031277162/browser-addon-markdown-viewer). – KonstantinK

Смежные вопросы