1

Mozilla Firefox에서 활성 탭 제목과 URL을 가져 오려고합니다. 나는 수동으로 Firefox 확장을 설치하고 활성 탭 제목과 URL을 얻기위한 C# Windows 클래스 라이브러리 응용 프로그램을 만들었습니다.Firefox 확장에서 기본 메시징을 통해 C#으로 메시지 받기

우선, package.json, main.js, install.rdf 등과 같은 파일이 들어있는 Firefox Extension을 설치했습니다. 아래 코드는 내 코드입니다.

main.js

// import js-ctypes 

var {Cu} = require("chrome"); 
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null); 

var self = require("sdk/self"); 
var tabs = require("sdk/tabs"); 

var button = require("sdk/ui/button/action").ActionButton({ 
id: "style-tab", 
label: "Style Tab", 
icon: "./icon-16.png", 
onClick: function() { 

// Open the library 
    var winffAddonewdl; 
    try 
    { 
    // Linux 
     winffAddonewdl = ctypes.open("filename.dll"); 
    } 
    catch (e) 
    { 
    // Most other Unixes 
     winffAddonewdl = ctypes.open("filename.dll"); 
    } 

    //alert(tabs.activeTab.url); 
    // Import a function 

    var OpenStandardStreamIn = winffAddonewdl.declare("OpenStandardStreamIn", // function name 
    ctypes.default_abi, // call ABI 
    ctypes.int,   // return type 
    ctypes.char.ptr, // argument type 
    ctypes.char.ptr); // argument type 

    var ret = OpenStandardStreamIn(tabs.activeTab.title, tabs.activeTab.url); 

    winffAddonewdl.close(); 

    } 
}); 

나는 아래 링크의 도움 (1) https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Installation (2) https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Getting_started 내 추가 기능은 와 추가 기능에 SDK를 사용하여 내 추가 기능을 개발했다 성공적으로 설치되었습니다.

또한 추가 기능 설치를위한 레지스트리 항목을 만들었으며 추가 기능도 성공적으로 설치되었으며 아이콘을 클릭 할 때마다 제목뿐만 아니라 현재 URL이 표시되었습니다.

이제 저는 다른 파이어 폭스 탭이나 파이어 폭스 창으로 전환 할 때마다 파이어 폭스 브라우저에서 Title뿐만 아니라 URL을 얻고 싶습니다. 이 활성 탭 제목 및 URL을 얻을 수있는 C# Windows 클래스 라이브러리 응용 프로그램을 개발했습니다.

이제 내 질문은이 Windows 클래스 라이브러리 응용 프로그램을 실행하고 네이티브 메시징을 통해 JS 파일에서 제목과 URL을 가져 오는 것입니다. Windows 클래스 라이브러리 응용 프로그램을 실행해야합니까? 심지어 윈도우 클래스에서 제목과 URL을받을 수 없습니다. 도서관 신청

지금해야 할 일. 이 점에 대해 도와주세요. 내가 main.js 파일 안에 간단한 코드를 작성했습니다

편집. 다음은 내 코드

내 추가 기능이 성공적으로 설치됩니다
var tabs = require('sdk/tabs'); 

tabs.on('activate', function(tab) { 
    console.log('active: ' + tab.url); 
}); 

하지만 "찾을 수 없습니다 요소"를 제외한 브라우저 콘솔에서오고 다른 파이어 폭스의 탭이나 창에 아무것도로 전환 할 때 또는 "내용이 null 인"탭 -에있다 events.js.

단순히 활성 탭 URL을 기록하고 싶습니다. 그렇게하는 방법?

나는 위의 문제를 공표하면 나중에 현지 토의를 논의 할 것이다.

+0

당신이'var ret = OpenStandardStreamIn (tabs.a ...'? – Noitidart

+0

) 할 때 브라우저 콘솔은 무엇을 던져 줍니까? ctyoes.open ('filename.dll')을 할 때 전체 경로 그래서'ctypes.open (self.data.url ('filename.dll'))' – Noitidart

+0

@Noitidart, 답장을 보내 주셔서 감사합니다.이 간단한 부분을 완료하면 나중에 네이티브 섹션으로갑니다. 편집 섹션. – Tutun

답변

1

위의 질문에 대한 해결책을 찾았습니다. 아래는 main.js 파일의 코드입니다.

var {Cu} = require("chrome"); 
var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", null); 

var self = require("sdk/self"); 
var tabs = require("sdk/tabs"); 

tabs.on('activate', callNative); 

function callNative(tab) 
{ 

    var ff; 
    try { 

    ff = ctypes.open("filename.dll"); 


    var nativeCaller = ff.declare("OpenStandardStreamIn", // function name 
          ctypes.default_abi, // call ABI 
          ctypes.int32_t,   // return type 
          ctypes.char.ptr, // argument type 
          ctypes.char.ptr); // argument type 


    var ret = nativeCaller(tab.title, tab.url); 
    ff.close(); 
    } catch (e) { 

    } 


} 

네이티브의 경우 Visual Studio에서 비어있는 dll 프로젝트를 만들었습니다. 아래는 코드입니다.

#include <stdio.h> 
#include <stdlib.h> 

extern "C" 
{ 
    _declspec(dllexport) int OpenStandardStreamIn(char *title, char *url) 
    { 
     FILE *fp; 

     fp = fopen("dumfilename.txt", "a"); 

     fprintf(fp, "%s\n", title); 
     fprintf(fp, "%s\n", url); 

     fclose(fp); 
    return 0; 
    } 
} 

dll 프로젝트를 컴파일하고이 dll 파일을 시스템 폴더에 덤프하십시오. firefox-addon에 대한 레지스트리 항목을 만듭니다. Mozilla Firefox 브라우저를 다시 시작하여 애드온을 활성화하십시오.

성공적으로 설치 한 후 Mozilla Firefox 브라우저에서 URL을 열거 나 다른 탭이나 창으로 전환 한 다음 제목과 URL이있는 덤프 파일을 확인하십시오.