2011-12-29 2 views
1

markdown 파일을 올바르게 표시 할 수있는 기본 Firefox 추가 기능을 작성하려고합니다.Page-Mod of HTML이 아닌 파일

불행히도 저는 프로세스의 첫 단계를 작동시킬 수조차 없습니다.

나는 몇 가지 기본적인 코드가 있습니다

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

을하지만 로컬 또는 서버에서 이러한 파일을 열 때 트리거되지 않습니다.

단순한 include: ['*'] 일지라도 HTML이 아닌 파일을 열 때를 ​​제외하고 내가 방문하는 모든 단일 페이지에서 알림이 실행됩니다.

그래서 가능한 모든 텍스트 파일이나 HTML이 아닌 파일을 대상으로하거나 콘텐츠를 가져 오거나 새로운 콘텐츠를 작성할 수 있습니까?

+1

내용 스크립트는 트리거, 그래서이 방법으로 비 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); 
}); 

내가 markdown.js 그것을 처리, 두 번째 HTTP 요청에 원시 인하 텍스트를 가져 오는됩니다하고있어, 그것을 페이지에 삽입하십시오. 확실히 해키 비트는 두 번째 http 요청입니다.

여기 빌더에서 동작하는 예제입니다 : HTML 문서를로드 할 때

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

관련 문제