반응형

오랫동안 사용하던 웹마를 제쳐두고.... 파이어폭스로 전환하기로 했다..

그래서 이것저것 애드온등을 추가하다 보니... ㅎㅎ 나름 괜찮다..

일단 스킨을 씌어놓고 보니 간지가 난다.. ^^



현재 파폭에 스킨을 씌우고 여러가지 애드온을 추가하였다...

현 포스트도 파폭으로 작성중이다.. 별 문제 없이 잘 작동한다.

속도도 많이 빨라졌고 무엇보다 파폭을 사용하면서 그 확장성에 놀라지 않을수 없다.^^


이것저것 애드온을 마구 추가하다 보니 이렇게나 많이 추가하게 되버렸다..^^

대충 설명하자면

1. Adblock Plus            광고 제거

2. Cooliris                    이미지나 미디어를 3D로 검색해서 보여준다. 그 간지가 장난이 아니다.. 실로 좀 짱이다.

3. Cycle Input Focus     키조합을 입력할수 있게 해주는 애드온인듯

4. Download Statusbar   파일다운로드시 작은 상태바를 출력해주는 애드온. IE 같이 작업표시줄에 여러개의 윈도우가 생기지 않는다.

5. DownloadHelper        이미지나 미디어 파일을 바로 다운받을수 있게 해준다.

6. East Asian Translator 페이지를 번역해주는 애드온이다. 아쉽게도 영어 -> 한국어는 제공하지 않는다. 영어 -> 일본어는 되는데

7. Easy DragToGo          페이지내의 텍스트나 이미지 등을 드래그 제스처를 이용하여 새 탭으로 열거나 다운할수 있다.

8. FastDic                      마우스 클릭으로 블럭한 텍스트를 빠르게 사전검색할수 있다.

9. FireGestures              마우스 동작으로 다양한 명령을 실행하게 한다. 마우스 제스처

10. Flashblock               플래쉬를 차단해준다.

11. IE Tab                     이게 또 없으면 한국 웹사이트 사용이 힘들다. 엑티브 액스문제를 해결. ActiveX 페이지를 익스플로러로 브라우징

12. Java Quick Starter      디폴트로 포함

13. KwiClick                   여러가지 사이트 검색을 모아놓은것이다. 작은 창이 오른쪽 하단에 뜨므로 편리하다.

14. Mouseless Browsing 마우스 없이 웹서핑을 하려면 이 애드온을 빼놓을수 없다. 키보드로 웹서핑을...

15. Stylish                      웹사이트의 모양과 사용자 인터페이스를 설정

16. Tab Mix Plus             탭브라우징 기능을 향상시키는 애드온

17. TabIMSwitch             브라우져내의 탭마다 한/영 키를 기억하고 있다. URL 입력창에 이동시 자동 영문으로 변환된다.  www.  를 ㅈㅈㅈ. 자주 오타를 내는 내게 필요한 애드온

이렇게 이것저것 포함하다 보니 17개의 애드온을 설치해버렸다.. 무거워 진듯.. ㅠㅠ

그래도 파폭을 강추할수 밖에 없는 이유중의 애드온들이니 이 어찌 하나라도 포기할소냐...

더 많은 애드온들이 존재하니 자기에게 맞는 애드온을 찾아 추가해서 사용하자.^^
반응형
About the Browser

This section explains the architecture of Microsoft Internet Explorer 4.0 and later and provides information you will find helpful when reusing these components.

This topic contains the following sections.

Architectural Overview

Windows Internet Explorer uses Microsoft ActiveX Controls and Active Document interfaces to connect components. The following diagram provides a high-level overview.

Internet Explorer 4.0 Architecture.

IExplore.exe is at the top level; it is a small application that is instantiated when Internet Explorer is loaded. This executable application uses Internet Explorer components to perform the navigation, history maintenance, favorites maintenance, HTML parsing and rendering, and so on, while it supplies the toolbar and frame for the stand-alone browser. IExplorer.exe directly hosts the Shdocvw.dll component.

Shdocvw.dll in turn hosts the Mshtml.dll component, as well as any other Active Document component (such as a Microsoft Office application) that can be loaded in place in the browser when the user navigates to a specific document type. Shdocvw.dll supplies the functionality associated with navigation, in-place linking, favorites and history management, and PICS support. This DLL also exposes interfaces to its host to allow it to be hosted separately as an ActiveX control. The Shdocvw.dll component is more frequently referred to as the WebBrowser Control. In-place linking refers to the ability to click a link in the HTML of the loaded document and to load a new HTML document in the same instance of the WebBrowser Control. If only Mshtml.dll is being hosted, a click on the link results in a new instance of the browser.

Mshtml.dll is the component that performs the HTML parsing and rendering in Internet Explorer 4.0 and later, and it also exposes the HTML document through the Dynamic HTML Object Model. This component hosts the scripting engines, Microsoft virtual machine, ActiveX Controls, plug-ins, and other objects that might be referenced in the loaded HTML document. Mshtml.dll implements the Active Document server interfaces, which allows it to be hosted using standard Component Object Model (COM) interfaces.

As this is an OLE-based architecture, the ambient properties that are commonly used by ActiveX Controls can also be applied to the Internet Explorer components. In this way, a host of the WebBrowser Control can set an ambient property that will filter down to all the frames and controls hosted in the loaded document.

Choosing the Correct Component

The WebBrowser Control provides a rich set of functionality that a host typically requires, such as that for in-place linking. Therefore, it is much more applicable for most applications to host this control instead of MSHTML for browsing or viewing HTML documents. Hosting MSHTML is recommended only for specialized applications, such as parsing HTML. The WalkAll Sample Source Page demonstrates how to host MSHTML.

It should also be noted that although hosting MSHTML is slightly more lightweight than hosting the WebBrowser Control, the savings rarely justify the extra work involved in implementing functionality that is already available in the WebBrowser Control. It is very likely that the WebBrowser Control will already be loaded in memory, and navigating to a frameset page will also result in the WebBrowser Control being loaded as part of the standard working set.

Providing Extra Control

Hosts of the WebBrowser Control and MSHTML components have control over certain functionality. In the case of the WebBrowser Control, this includes navigation, as well as receiving events when the document is loaded. Hosts of either component can obtain extra control over functionality by implementing the IDocHostUIHandler and IDocHostShowUI interfaces. These interfaces are commonly used to override the context menus that are supplied by default for the browser. Their uses also include setting the 3-D border, overriding the location in the registry where options are stored, and extending the Dynamic HTML Object Model.

The component obtains these interfaces from the host by calling QueryInterface on the IOleClientSite interface implemented by the hosting application.

Controlling the Context Menus

A common requirement of hosting the WebBrowser Control is the ability to override or add to the context menus that are displayed as the result of a right-click in the browser window. This is of particular interest to applications that are using the WebBrowser Control to view rich content but do not want the user to know that HTML is being viewed. This is also advantageous for applications that do not want the user to be able to view the HTML source for the content.

There are two techniques available to achieve this. The first involves the use of the IDocHostUIHandler interface and allows an application to disable or replace the context menus. The second technique involves the use of the registry and allows the existing context menus to be extended.

Overriding the Context Menus

The WebBrowser Control's context menus can be overridden entirely by implementing the IDocHostUIHandler::ShowContextMenu method. Returning E_NOTIMPL or S_FALSE from this method indicates to the WebBrowser Control that it should display its own standard context menu. However, returning S_OK causes the WebBrowser Control not to display its menus, and it assumes that the host has performed the appropriate action. The host can disable all context menus or bring up its own context menus. The parameters supplied to the host that implements this method allow that host to identify which of the default menus will be displayed by the WebBrowser Control, as well as the coordinates where the menu will be displayed. This provides the host the full context for the menu. For example, the host can choose to override only the image context menus and not the standard context menus.

Adding to the Standard Context Menus

Items can be added to the existing context menus of the WebBrowser Control by placing entries in the registry and linking these to URLs that execute script. To add items to the standard WebBrowser Control context menus, create or open the following key:

  • HKEY_CURRENT_USER
    • Software
      • Microsoft
        • Internet Explorer
          • MenuExt

Under this key, you create a key whose name contains the text you want displayed in the menu. The default value for this key contains the URL that will be executed. The key name can include the ampersand (&) character, which will cause the character immediately following the & to be underlined. The URL will be loaded inside a hidden HTML dialog box, all the inline script will be executed, and the dialog box will be closed. The hidden HTML dialog's menuArguments property (on the external object) contains the window object of the window on which the context menu item was executed.

The following registry entry adds an item with the title "My Menu Item" to the WebBrowser Control context menu and executes the inline script contained in the file c:\myscript.htm.

  • HKEY_CURRENT_USER
    • Software
      • Microsoft
        • Internet Explorer
          • MenuExt
            • My &Menu Item

            • (Default) = file://c:\myscript.htm

The contents of c:\myscript.htm are as follows:

<SCRIPT LANGUAGE="JavaScript" defer>
   var parentwin = external.menuArguments;
   var doc = parentwin.document;
   var sel = doc.selection;
   var rng = sel.createRange();
   var str = new String(rng.text);

   if(str.length == 0)
      rng.text = "MY INSERTED TEXT";
   else
      rng.text =  str.toUpperCase();
</SCRIPT>

This script obtains the parent window object from external.menuArguments. The parent window object is the WebBrowser Control in which the context menu item was executed. The script then obtains the current selection and, if no selection is present, inserts the text "MY INSERTED TEXT" at the point where the context menu was executed. If there is a selection present, the selected text is changed to uppercase.

Optional keys

Under the item registry key created earlier, there are a couple of optional values. One of these specifies on which context menus this item will appear. The other specifies that the script should be run as a dialog box.

The "Contexts" DWORD value specifies the context menus in which an item will appear. This value is a bit mask consisting of the logical OR of the following values (defined in Mshtmhst.h). These values correspond to the constant passed in an IDocHostUIHandler::ShowContextMenu call.

Value Constant Name Description
0x01 CONTEXT_MENU_DEFAULT Shown on all context menus.
0x02 CONTEXT_MENU_IMAGE Context menu of images only.
0x04 CONTEXT_MENU_CONTROL Context menu of form controls only.
0x08 CONTEXT_MENU_TABLE Context menu of tables only.
0x10 CONTEXT_MENU_TEXTSELECT Context menu of selected text only, including images in a selected region.
0x20 CONTEXT_MENU_ANCHOR Context menu of links only. Does not include linked images or image maps.
0x40 CONTEXT_MENU_UNKNOWN Right-click on none of the above.

So if, for example, you want this simple extension to appear only in the default menu and the text selection menu, you could create a DWORD value in the registry under the My Menu Item key called "Contexts" and set it to 0x11. From C/C++ code, this can be expressed as:

CONTEXT_MENU_DEFAULT | CONTEXT_MENU_TEXTSELECT

The other optional registry DWORD value is "Flags". There is only one valid bit (0x1) for this registry value; it is defined as MENUEXT_SHOWDIALOG in Mshtmhst.h. When this bit is set, the script is run just as if it had been called through the IHTMLWindow2::showModalDialog method. The window that runs the script is not hidden, and the dialog box is not automatically closed after inline and onload script finishes. The external.menuArguments value still contains the window object where the user selected the menu item.

The context menu event

Whenever a context menu extension is triggered, the event object off the main window (external.menuArguments.event) contains information about where the user clicked and which context menu was shown. The mouse coordinates are valid along with srcElement. The type value contains one of the following strings, indicating which context menu was shown to the user:

  • MenuExtDefault
  • MenuExtImage
  • MenuExtControl
  • MenuExtTable
  • MenuExtTextSelect
  • MenuExtAnchor
  • MenuExtUnknown

Another example

This example creates a new menu item on the default context menu. This item, called Show In New Window, can be used to launch a new window that displays only a specific portion of the current document. If something is deeply nested in a frameset, you can easily launch a specific frame in its own window.

Here are the contents of a .reg file that can be run to insert the correct registry settings. Call this file Example2.reg. Double-clicking this file in Windows Explorer will insert the settings in your registry.

REGEDIT4

    [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\Show in New Window]
    @="file://c:\\example2.htm"
    "Contexts"=dword:00000001

Here are the contents of c:\example2.htm:

<SCRIPT LANGUAGE="JavaScript" defer>
    window.open(external.menuArguments.location.href);
</SCRIPT>

For more information, see Adding Entries to the Standard Context Menu.

Extending the Dynamic HTML Object Model

It is possible for the hosting application to extend the Dynamic HTML Object Model so that scripts can refer to functionality implemented by the host. Such scripts refer to the host by specifying the external object that is available from the window object. For example, a reference to "window.external.speech" will call the host to resolve the name "speech." All standard script within the document will be executed normally.

This extension mechanism is implemented in the host by providing an IDispatch interface for the object model extension that will have IDispatch::GetIDsOfNames and IDispatch::Invoke called on it to resolve any references to the external object. The IDispatch that the host provides is obtained by the WebBrowser Control or MSHTML component by calling the host's IDocHostUIHandler::GetExternal method.

For an example of how to extend the Dynamic HTML Object Model, see the Driller Sample Source Page.

Download Control

Hosts can control certain aspects of downloading—frames, images, Java, and so on—by implementing both IOleClientSite and an ambient property defined as DISPID_AMBIENT_DLCONTROL. When the host's IDispatch::Invoke method is called with dispidMember set to DISPID_AMBIENT_DLCONTROL, it should place zero or a combination of the following values in pvarResult.

DLCTL_BGSOUNDS The browsing component will play background sounds associated with the document.
DLCTL_DLIMAGES The browsing component will download images from the server.
DLCTL_DOWNLOADONLY The browsing component will download the page but not display it.
DLCTL_FORCEOFFLINE The browsing component will always operate in offline mode. This causes the BINDF_OFFLINEOPERATION flag to be set even if the computer is connected to the Internet when making requests through URLMON.
DLCTL_NO_BEHAVIORS The browsing component will not execute any behaviors.
DLCTL_NO_CLIENTPULL The browsing component will not perform any client pull operations.
DLCTL_NO_DLACTIVEXCTLS The browsing component will not download any ActiveX Controls in the document.
DLCTL_NO_FRAMEDOWNLOAD The browsing component will not download frames but will download and parse the frameset page. The browsing component will also ignore the frameset, and will render no frame tags.
DLCTL_NO_JAVA The browsing component will not execute any Java applets.
DLCTL_NO_METACHARSET The browsing component will suppress HTML Character Sets reflected by meta elements in the document.
DLCTL_NO_RUNACTIVEXCTLS The browsing component will not execute any ActiveX Controls in the document.
DLCTL_NO_SCRIPTS The browsing component will not execute any scripts.
DLCTL_OFFLINE Same as DLCTL_OFFLINEIFNOTCONNECTED.
DLCTL_OFFLINEIFNOTCONNECTED The browsing component will operate in offline mode if not connected to the Internet. This causes the BINDF_GETFROMCACHE_IF_NET_FAIL flag to be set if the computer is connected to the Internet when making requests through URLMON.
DLCTL_PRAGMA_NO_CACHE The browsing component will force the request through to the server and ignore the proxy, even if the proxy indicates that the data is up to date. This causes the BINDF_PRAGMA_NO_CACHE flag to be set when making requests through URLMON.
DLCTL_RESYNCHRONIZE The browsing component will ignore what is in the cache and ask the server for updated information. The cached information will be used if the server indicates that the cached information is up to date. This causes the BINDF_RESYNCHRONIZE flag to be set when making requests through URLMON.
DLCTL_SILENT The browsing component will not display any user interface. This causes the BINDF_SILENTOPERATION flag to be set when making requests through URLMON.
DLCTL_URL_ENCODING_DISABLE_UTF8 The browsing component will disable UTF-8 encoding.
DLCTL_URL_ENCODING_ENABLE_UTF8 The browsing component will enable UTF-8 encoding.
DLCTL_VIDEOS The browsing component will play any video clips that are contained in the document.

Security Manager

Hosts of the browsing components can implement their own security management and override the settings that exist for the WebBrowser Control. This is achieved by implementing the IInternetSecurityManager interface. The browsing component will obtain this interface by calling the host's IServiceProvider::QueryService method with SID_SInternetSecurityManager. For more information on security management, see About URL Security Zones.


반응형

Java 로 사용될 수 있는 Browser Component 에 대하여 (리눅스 플렛폼에서 사용할 목적으로) 조사하였음.

실 사용자의 사용 브라우저와 가장 근접한 렌더링 결과를 내면서 가장 높은 접근성을 가지는 것을 목적으로 조사하였기 때문에.

결과가 Mozilla Compatable 한 방향으로 편중 되어 있음을 미리 염두에 두고 보시면 편할 듯.


http://www.webrenderer.com/index.php

Full Swing 으로 구현된 Mozilla Compatable Browser. 상용이다.

아무래도 돈주고 사는 제품이다 보니, 완성도는 높을 듯. 랜더링,접근성 대비 최상이라고 예상됨.


http://www.icesoft.com/products/icebrowser.html

Full Java로 구현되었으며 Java Application에 Embed 되어 사용되는 목적으로 개발 되었다.

상용제품으로 완성도는 높지만, 가격이 문제. Mozilla Compatable 하지 않으므로 효용성이 떨어짐


http://jazilla.sourceforge.net/

Java로 구현된 Mozilla compatible(HTML,XUL) rendering engine

현재 M4 까지 진행 된 상태 이며, 오픈소스로 진행 되며, M4까지 진행 된 관계로 완성도가 떨어질 것으로 예상.

정확한 완성도는 살펴보지 못 하였음. 관련 자료는 http://sourceforge.net/projects/jazilla/ 에서 다운로드 받을 수 있음.


http://mozillaparser.sourceforge.net/

Mozilla Parser만 연결한 방식, Rendering 이 들어가 있지 않으므로 반쪽 효용성.

JNI 방식이며 설명에도 나와 있지만 연결방식이 매끄럽지 못하여 성능 문제가 있는것 으로 보임.


http://www.eclipse.org/atf/

가장 Stable 하다는 평이 있음. SWT 용 이며, Browser 목적으로 따로 나와 있는 것이 아니고,

ATF에서 사용되는 일부 기능인 만큼, 분석 및 따로 떼어서 작성하는 과정이 필요함. (Firefox,IE 등 모두 연결 가능)


http://www.mozilla.org/projects/blackwood/webclient/

Java WebShell 을 사용하는 개념을 지원하는 Mozilla 프로젝트 (Gecko 뿥만 아니라 Windows에서 IE도 연결 가능하다고 함)

Mozilla 정식 프로젝트 인 만큼 가장 많은 기능을 사용할 수 있으며, 랜더링 또한 Firefox와 같은 수준

접근성 또한 높은 수준으로 제공됨, 다만 Full Java 가 아니기 때문에 완벽한 접근성이 보장되는 것은 아님.


https://jdic.dev.java.net/

java.net 에서 호스트 되는 프로젝트로 Mozilla 뿐만 아니라 IE등의 브라우져를 JNI 방식으로 연결하여 제공한다.

기능성 및 접근성이 많이 떨어진다.


http://jrex.mozdev.org/

Mozilla Gecko를 Embedding 하여 사용할 수 있도록 지원한다. JNI 방식이며 GRE를 설치하여 사용한다.

Mozilla Gecko 1.4  이상 과 호환되며 접근성은 어느정도 제한적 인 것으로 보인다.

+ Recent posts