"파이어폭스 플러그인 개발 방법 (npruntime)"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-== 참고 자료 == +==참고==))
 
(사용자 2명의 중간 판 9개는 보이지 않습니다)
13번째 줄: 13번째 줄:
본 문서에서는 모질라에서 제공하는 [http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/ npruntime sample] 을 이용하여 스크립팅 플러그인 개발 방법을 설명한다.
본 문서에서는 모질라에서 제공하는 [http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/ npruntime sample] 을 이용하여 스크립팅 플러그인 개발 방법을 설명한다.


npruntime 스크립팅 플러그인은 NPAPI 플러그인과 동일하게 [http://code.google.com/p/npapi-sdk/ npapi-sdk] 이용하여 개발할 수 있따.
npruntime 스크립팅 플러그인은 NPAPI 플러그인과 동일하게 [http://code.google.com/p/npapi-sdk/ npapi-sdk] 이용하여 개발할 수 있다.


== Getting npapi-sdk ==
== npapi-sdk 받기 ==
npapi-sdk 소스를 체크아웃 한다.
npapi-sdk 소스를 체크아웃 한다.
<source lang="bash">
<source lang="bash">
21번째 줄: 21번째 줄:
</source>
</source>


== Getting  npruntime sample ==
== npruntime 샘플 받기==
모질라 CVS에서 npruntime 샘플 코드를 체크아웃 한다.
모질라 CVS에서 npruntime 샘플 코드를 체크아웃 한다.


28번째 줄: 28번째 줄:
</source>
</source>


== Build npruntime sample ==
== npruntime 샘플 빌드==
위 npruntime 샘플 코드는 Makefile 이 존재하지 않으므로, npapi-sdk 소스 내의 unix-basic의 Makefile을 참고하여 아래와 같이 Makefile을 작성 후 빌드한다.
위 npruntime 샘플 코드는 Makefile 이 존재하지 않으므로, npapi-sdk 소스 내의 unix-basic의 Makefile을 참고하여 아래와 같이 Makefile을 작성 후 빌드한다.


39번째 줄: 39번째 줄:
</source>
</source>


<source lang="make" line>
<source lang="make" line highlight='5'>
CXX = g++
CXX = g++


56번째 줄: 56번째 줄:


clean :
clean :
rm -rf $(TAGET) $(OBJS)
rm -rf $(TARGET) $(OBJS)
</source>
</source>


== Patch npruntime sample ==
== npruntime 샘플 패치==
작성된 Makefile 을 이용하여 빌드를 수행할 경우 npapi-sdk에 정의된 해더와 호환되지 않아 에러가 발생한다.
작성된 Makefile 을 이용하여 빌드를 수행할 경우 npapi-sdk에 정의된 해더와 호환되지 않아 에러가 발생한다.


217번째 줄: 217번째 줄:
</source>
</source>


== Test plugin ==
== 테스트 ==
빌드된 결과물은 npruntime.so 파일 이다. 플러그인 파일을 firefox plugin 디렉토리에 복사하고 firefox를 실행하여 npruntime 샘플 소스에 포함되어 있는 test.html 파일을 open하여 동작을 확인한다.
빌드된 결과물은 npruntime.so 파일 이다. 플러그인 파일을 firefox plugin 디렉토리에 복사하고 firefox를 실행하여 npruntime 샘플 소스에 포함되어 있는 test.html 파일을 open하여 동작을 확인한다.


231번째 줄: 231번째 줄:
*[[파이어폭스 플러그인 개발 방법]]
*[[파이어폭스 플러그인 개발 방법]]


== 참고 자료 ==
==참고==
* [https://developer.mozilla.org/en-US/Add-ons/Plugins/Gecko_Plugin_API_Reference/Scripting_plugins?redirectlocale=en-US&redirectslug=Gecko_Plugin_API_Reference%2FScripting_plugins Scripting plugins in Mozilla Developer Network]
* [https://developer.mozilla.org/en-US/Add-ons/Plugins/Gecko_Plugin_API_Reference/Scripting_plugins?redirectlocale=en-US&redirectslug=Gecko_Plugin_API_Reference%2FScripting_plugins Scripting plugins in Mozilla Developer Network]



2017년 6월 27일 (화) 02:12 기준 최신판

1 목적[ | ]

본 문서는 ubuntu 상에서 firefox 웹브라우저에 npruntime 기반 NPAPI 플러그인 개발 및 적용 방법에 대해 기술한다.

본 문서에 사용되는 소프트웨어의 버전은 다음과 같다.

  • Ubuntu 13.10 64 bit
  • Firefox 25.0.1 (Mozilla Firefox for Ubuntu canonical - 1.0)
  • g++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1

NPAPI 플러그인은 웹페이지 내에 그래픽/동영상 표현과 같은 기능만 수행 가능하며, 플러그인과 HTML 페이지 간의 자바스크립트 기반 연동을 수행하기 위해서는 npruntime 기반 스크립팅 플러그인을 작성해야 한다.

본 문서에서는 모질라에서 제공하는 npruntime sample 을 이용하여 스크립팅 플러그인 개발 방법을 설명한다.

npruntime 스크립팅 플러그인은 NPAPI 플러그인과 동일하게 npapi-sdk 이용하여 개발할 수 있다.

2 npapi-sdk 받기[ | ]

npapi-sdk 소스를 체크아웃 한다.

svn checkout http://npapi-sdk.googlecode.com/svn/trunk/ npapi-sdk

3 npruntime 샘플 받기[ | ]

모질라 CVS에서 npruntime 샘플 코드를 체크아웃 한다.

cvs -d :pserver:anonymous:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/modules/plugin/samples/npruntime

4 npruntime 샘플 빌드[ | ]

위 npruntime 샘플 코드는 Makefile 이 존재하지 않으므로, npapi-sdk 소스 내의 unix-basic의 Makefile을 참고하여 아래와 같이 Makefile을 작성 후 빌드한다.

아래 Makefile 내용 중 6번째 라인의 INCLUDES 항목에는 앞서 체크 아웃한 npapi-sdk의 headers 디렉토리를 참조하도록 작성한다.

cd mozilla/modules/plugin/samples/npruntime
vi Makefile
make
CXX = g++

CXXFLAGS = -Wall -DXP_UNIX=1 -fPIC -g 

INCLUDES = -I../../../../../npapi-sdk/headers

TARGET = npruntime.so
OBJS = np_entry.o npn_gate.o npp_gate.o plugin.o

$(TARGET) : $(OBJS) 
	$(CXX) $(CLFAGS) -o $@ -shared $(OBJS)

%.o:%.cpp
	$(CXX) $(CXXFLAGS) $(INCLUDES) -c $<

clean :
	rm -rf $(TARGET) $(OBJS)

5 npruntime 샘플 패치[ | ]

작성된 Makefile 을 이용하여 빌드를 수행할 경우 npapi-sdk에 정의된 해더와 호환되지 않아 에러가 발생한다.

아래의 패치 내용을 복사하여 npapi-sdk.patch 이름으로 npruntime 샘플 디렉토리에 저장한다. 아래와 같이 패치를 수행하고 다시 빌드 한다.

patch < npapi-sdk.patch
make
? npapi-sdk.patch
Index: np_entry.cpp
===================================================================
RCS file: /cvsroot/mozilla/modules/plugin/samples/npruntime/np_entry.cpp,v
retrieving revision 1.1
diff -r1.1 np_entry.cpp
43c43,45
< #include "npupp.h"
---
> #include "npfunctions.h"
> 
> typedef uint32_t uint32;
82c84
< char *NPP_GetMIMEDescription();
---
> //char *NPP_GetMIMEDescription();
84c86
< char *
---
> const char *
95a98,99
> NPError NPP_Initialize(void);
> 
164,173c168,177
<   pluginFuncs->newp       = NewNPP_NewProc(NPP_New);
<   pluginFuncs->destroy    = NewNPP_DestroyProc(NPP_Destroy);
<   pluginFuncs->setwindow  = NewNPP_SetWindowProc(NPP_SetWindow);
<   pluginFuncs->newstream  = NewNPP_NewStreamProc(NPP_NewStream);
<   pluginFuncs->destroystream = NewNPP_DestroyStreamProc(NPP_DestroyStream);
<   pluginFuncs->asfile     = NewNPP_StreamAsFileProc(NPP_StreamAsFile);
<   pluginFuncs->writeready = NewNPP_WriteReadyProc(NPP_WriteReady);
<   pluginFuncs->write      = NewNPP_WriteProc(NPP_Write);
<   pluginFuncs->print      = NewNPP_PrintProc(NPP_Print);
<   pluginFuncs->urlnotify  = NewNPP_URLNotifyProc(NPP_URLNotify);
---
>   pluginFuncs->newp       = NPP_New;
>   pluginFuncs->destroy    = NPP_Destroy;
>   pluginFuncs->setwindow  = NPP_SetWindow;
>   pluginFuncs->newstream  = NPP_NewStream;
>   pluginFuncs->destroystream = NPP_DestroyStream;
>   pluginFuncs->asfile     = NPP_StreamAsFile;
>   pluginFuncs->writeready = NPP_WriteReady;
>   pluginFuncs->write      = NPP_Write;
>   pluginFuncs->print      = NPP_Print;
>   pluginFuncs->urlnotify  = NPP_URLNotify;
175c179
<   pluginFuncs->getvalue   = NewNPP_GetValueProc(NPP_GetValue);
---
>   pluginFuncs->getvalue   = NPP_GetValue;
Index: npn_gate.cpp
===================================================================
RCS file: /cvsroot/mozilla/modules/plugin/samples/npruntime/npn_gate.cpp,v
retrieving revision 1.1
diff -r1.1 npn_gate.cpp
43c43,46
< #include "npupp.h"
---
> #include "npfunctions.h"
> 
> typedef uint32_t uint32;
> typedef int32_t int32;
182,195d184
< JRIEnv* NPN_GetJavaEnv(void)
< {
<   JRIEnv * rv = NULL;
< 	rv = NPNFuncs.getJavaEnv();
<   return rv;
< }
< 
< jref NPN_GetJavaPeer(NPP instance)
< {
<   jref rv;
< 	rv = NPNFuncs.getJavaPeer(instance);
<   return rv;
< }
< 
Index: npp_gate.cpp
===================================================================
RCS file: /cvsroot/mozilla/modules/plugin/samples/npruntime/npp_gate.cpp,v
retrieving revision 1.1
diff -r1.1 npp_gate.cpp
45c45,48
< char*
---
> typedef uint16_t uint16;
> typedef int32_t int32;
> 
> const char*
169c172
<     *((char **)value) = "NPRuntimeTest";
---
>     *((char **)value) = (char*)"NPRuntimeTest";
172c175
<     *((char **)value) = "NPRuntime scriptability API test plugin";
---
>     *((char **)value) = (char*)"NPRuntime scriptability API test plugin";
264,268d266
< jref NPP_GetJavaClass (void)
< {
<   return NULL;
< }
< 
Index: plugin.cpp
===================================================================
RCS file: /cvsroot/mozilla/modules/plugin/samples/npruntime/plugin.cpp,v
retrieving revision 1.1
diff -r1.1 plugin.cpp
56c56,62
< #include "npupp.h"
---
> 
> #define PR_TRUE true
> #define PR_FALSE false
> #define TRUE true
> #define FALSE false
> 
> typedef uint16_t uint16;
510,511c516,517
<     str.utf8characters = "alert('NPN_IdentifierIsString() test failed!');";
<     str.utf8length = strlen(str.utf8characters);
---
>     str.UTF8Characters = "alert('NPN_IdentifierIsString() test failed!');";
>     str.UTF8Length = strlen(str.UTF8Characters);
526c532
<       printf ("title = %s\n", NPVARIANT_TO_STRING(rval).utf8characters);
---
>       printf ("title = %s\n", NPVARIANT_TO_STRING(rval).UTF8Characters);
537,538c543,544
<     str.utf8characters = "document.getElementById('result').innerHTML += '<p>' + 'NPN_Evaluate() test, document = ' + this + '</p>';";
<     str.utf8length = strlen(str.utf8characters);
---
>     str.UTF8Characters = "document.getElementById('result').innerHTML += '<p>' + 'NPN_Evaluate() test, document = ' + this + '</p>';";
>     str.UTF8Length = strlen(str.UTF8Characters);
575c581
<     printf ("prompt returned '%s'\n", NPVARIANT_TO_STRING(rval).utf8characters);
---
>     printf ("prompt returned '%s'\n", NPVARIANT_TO_STRING(rval).UTF8characters);
Index: plugin.h
===================================================================
RCS file: /cvsroot/mozilla/modules/plugin/samples/npruntime/plugin.h,v
retrieving revision 1.1
diff -r1.1 plugin.h
43a44,45
> typedef int16_t int16;
>

6 테스트[ | ]

빌드된 결과물은 npruntime.so 파일 이다. 플러그인 파일을 firefox plugin 디렉토리에 복사하고 firefox를 실행하여 npruntime 샘플 소스에 포함되어 있는 test.html 파일을 open하여 동작을 확인한다.

sudo cp npruntime.so /usr/lib/mozilla/plugins
firefox &

참고로 firefox를 콘솔을 통해 실행할 경우, 플러그인에서 printf 등을 이용해 stdout에 출력하는 로그를 확인할 수 있다.

7 같이 보기[ | ]

8 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}