webkit 扩展JS(添加新类)

来源:互联网 发布:iphone6s硬件检测软件 编辑:程序博客网 时间:2024/05/20 18:46

webkit 扩展JS(添加新类)

实现本文的方法后,可以在js脚本里用新的类  比如想新加一个类miuiAgent,其中的方法为descript,当调用alert(miuiAgent.descript)时即可弹出包含descript内容的窗口。具体描述如下(可以依葫芦画瓢) (本文是在android 4.1上实现的)


1. WebCore/page目录下在添加MIuiAgent.h文件  (WebCore/page/MiuiAgent.h)

#ifndef MiuiAgent_h
#define MiuiAgent_h
#include <wtf/RefCounted.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>

#if PLATFORM(ANDROID) && ENABLE(APPLICATION_INSTALLED)
#include "PlatformString.h"
#endif

namespace WebCore {

class Frame;

class MiuiAgent : public RefCounted<MiuiAgent> {
    public:
        static PassRefPtr<MiuiAgent> create(Frame* frame)
        {
            return adoptRef(new MiuiAgent(frame));
        }

        ~MiuiAgent();

        void disconnectFrame();
        Frame* frame() const { return m_frame; }

        String description() const;

    private:
        MiuiAgent(Frame*);
        Frame* m_frame;
};
}

#endif


2. WebCore/page目录下在添加MIuiAgent.cpp文件  (WebCore/page/MiuiAgent.cpp)

#include "config.h"
#include "MiuiAgent.h"

#include "PlatformString.h"

namespace WebCore {

    MiuiAgent::MiuiAgent(Frame* frame)
        : m_frame(frame)
    {
    }

    MiuiAgent::~MiuiAgent()
    {
        disconnectFrame();
    }

    void MiuiAgent::disconnectFrame()
    {
        m_frame = 0;
    }

    String MiuiAgent::description() const
    {
        return "XiaoMIBrowser";
    }
}


3. WebCore/page目录下在添加MIuiAgent.idl文件  (WebCore/page/MiuiAgent.idl)

module window {
    interface [OmitConstructor] MiuiAgent {
        readonly attribute DOMString description;
    };
}


4.  修改DOMWindow.h文件(WebCore/page/DOMWindow.h)

//添加声明

     class Navigator;
+   class MiuiAgent;
     class Node;

......

......

//添加函数

         Navigator* navigator() const;
         Navigator* clientInformation() const { return navigator(); }
+        MiuiAgent* miuiAgent() const;


         Location* optionalLocation() const { return m_location.get(); }
         StyleMedia* optionalMedia() const { return m_media.get(); }
+        MiuiAgent* optionMiuiAgent() const { return m_miuiAgent.get(); }


//添加成员

         mutable RefPtr<Location> m_location;
         mutable RefPtr<StyleMedia> m_media;
+        mutable RefPtr<MiuiAgent> m_miuiAgent;


5. 修改DOMWindow.cpp文件(WebCore/page/DOMWindow.cpp)

+#include "MiuiAgent.h"


//函数添加代码

void DOMWindow::clear() {
         m_navigator->disconnectFrame();
     m_navigator = 0;
 
+    if (m_miuiAgent)
+        m_miuiAgent->disconnectFrame();
+    m_miuiAgent = 0;


//添加函数

+MiuiAgent* DOMWindow::miuiAgent() const
+{
+    if (!m_miuiAgent)
+        m_miuiAgent = MiuiAgent::create(m_frame);
+    return m_miuiAgent.get();
+}


6. 修改DOMWindow.idl文件(WebCore/page/DOMWindow.idl)

         attribute [Replaceable] Navigator navigator;
         attribute [Replaceable] Navigator clientInformation;
+        attribute [Replaceable] MiuiAgent miuiAgent;


7. 修改Andrid.mk文件 (WebCore/Android.mk)

LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
     page/Location.cpp \
     page/MemoryInfo.cpp \
     page/MouseEventWithHitTestResults.cpp \
+    page/MiuiAgent.cpp \
     page/Navigator.cpp \
     page/NavigatorBase.cpp \
     page/OriginAccessEntry.cpp \


8. 修改Android.deviced.v8bindings.mk(WebCore/Android.deviced.v8bindings.mk)

GEN := \
     $(intermediates)/bindings/V8History.h \
     $(intermediates)/bindings/V8Location.h \
     $(intermediates)/bindings/V8MemoryInfo.h \
+    $(intermediates)/bindings/V8MiuiAgent.h \
     $(intermediates)/bindings/V8Navigator.h \


9. 大工告成


试着写一个html文件

<html>
<script type="text/javascript">


document.write("<p>--------++++++++++++++++</p>");
document.write("<p>" + miuiAgent.description + "</p>");

</script>
<body> 
</body>
</html>


即可看到页面显示文字

XiaoMiBrowser



0 0