一個Chrome拓展——HttpPost


周末花了點時間做了一個chrome拓展,叫HttpPost,顧名思義是用來測試http的post請求。

先直接看效果

插件與拓展

在說這個做的過程前,先說明什么是Chrome插件、Chrome拓展

1.開發語言區別
拓展:HTML + Javascript
插件:理論上可以用任何一種生成二進制程序的語言,比如 C/C++


2.功能上區別
拓展:通過調用Chrome提供的Chrome API擴展瀏覽器功能的一種組件
插件:調用Webkit內核NPAPI來擴展內核功能的一種組件

3.層次區別
拓展: 瀏覽器應用層
插件:瀏覽器的底層

但並不是說兩者之間沒有關系,

Chrome 擴展本身也支持包含 Plug-in 模塊,這部分可以使用 C/C++ 等語言開發。比如 web QQ 的截圖擴展,就是用了這項功能。 

如果把瀏覽器比作操作系統,擴展就好比工具類應用程序,插件則好比驅動程序。(某個貼說的)

現在開始說做的過程

最終完成就是以上的文件

這里面最重要的是manifest.json這個文件

{    
    "name": "HttpPost",    
    "version": "1.0.0",   
    "manifest_version": 2,     
    "description": "此插件能夠讓你更簡單測試HttpPost請求",        
    "icons": {       
        "128": "httppost_128.png",     
        "48": "httppost_48.png",      
        "16": "httppost_16.png"  
    },  "permissions": [
        "http://*/",
        "https://*/"
    ],
    "browser_action": {
        "default_icon": "httppost.png",
        "default_popup": "popup.html"
    }
}

這里就不講里面屬性的意義,本身屬性的名稱已經很明顯了。

就講下

permissions,表明這個拓展的所需要的權限,"http://*/","https://*/",表明能訪問http,https的域名,不會出現跨域問題。

browser_action:表明名的是拓展的類型,拓展有三種類型page_action, browser_action, app

popup.html

這個就是效果圖里的HTML

<!doctype html>
<html>
    <head>
        <title>HttpPost Test</title>
        <link rel="stylesheet" type="text/css" href="layout.css" />
        <script type="text/javascript"  src="popup.js"></script>
    </head>
    <body>
        <div class="container">
            <div class="reqMethod">
                <span>請求方式:</span>
                <label>Get</label><input name="method" type="radio" value="GET" />
                <label>Post</label><input name="method" type="radio" value="POST" />
            </div>
            <div class="">
                <span>請求地址:</span>
                <input name="url" type="text" />
            </div>
            <div class="">
                <span>請求參數:</span>
                <textarea name="data" class="reqData"></textarea>
            </div>
            <div class="">
                <span>響應數據:</span>
                <textarea name="responseData"></textarea>
            </div>
            <div class=""><button type="button" id="go" class="">GO!</button></div>
            <div style="clear:both"></div>
        </div>
    </body>
</html>

popup.js

這跟普通的javascript沒什么區別,但是下面的特點是全部都是用原生的JS。

(function(){

    document.addEventListener('DOMContentLoaded', function () {
        Event.beginRequest();
        Event.bindRadio();
    });


    var DataManage = {

        getRequestData : function(){
            var result = {
                method : document.querySelector("input[name=method]:checked").value,
                url : document.querySelector("input[name=url]").value,
                data : document.querySelector("textarea[name=data]").value
            };
            return result;
        },
        setResponseData : function(res){
            document.querySelector("textarea[name=responseData]").value = res.responseText;
        }
        
        
    }

    var Ajax = {

        req : function (params, callback) {
            
            var req = Ajax.getRequest(callback);        
            req.open(params.method, params.url, true);
            req.send(params.data);
        },
        getRequest : function (callback) {
        
            var req = new XMLHttpRequest();

            req.onreadystatechange = function() {
                if (req.readyState != 4)
                    return;
                if (req.status == 200) {
                    callback(req);
                } else {
                    alert("請求失敗:" + req.statusText);
                }
                return true;
            };
            return req;
        }
    };

    var Event = {
        beginRequest : function(){
            var goBtn  = document.querySelector("#go");
            goBtn.addEventListener('click', function(){
                var result = DataManage.getRequestData();
                Ajax.req(result, function(res){
                    DataManage.setResponseData(res);                
                });
            }, false);
        },
        bindRadio : function(){
            var labels = document.querySelectorAll(".reqMethod label");
            
            labels[0].addEventListener('click', function(){    
                document.querySelector("input[value=GET]").checked = true;
            }, false);
            
            labels[1].addEventListener('click', function(){    
                document.querySelector("input[value=POST]").checked = true;
            }, false);
        }
    }
})();

樣式就不放出來了。

PS:本來想直接把源碼放上來,但是好像沒有上傳資源地方。

總結

做Chrome拓展是非常簡單的,只需要HTML+Javascript就行了,下次做一個Chrome插件,不過目前沒什么需求,如果大家有什么好想法就告訴我。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM