chrome 插件化 方便调用storage.sync函数

需要

说明

c( key , value , callback )

key:

  • 说明-->储存键位,可选
  • 类型-->string / object
  • 如果是string,支持点语法 例如 u.getConfig
  • 如果是object,就会忽略value的值,直接把它写入到snyc储存

value:

  • 说明-->修改的值
  • 类型-->string / object / null
  • 不定义value为查询,定义了value则为修改
  • 如果是null , 删除该key(支持点语法)

callback:

  • 说明-->修改的值,必选
  • 类型-->function
  • 用以输出资料

奇淫巧技

  • c(function(ret){console.log(ret)});//输出全部snyc储存数据
  • c("u.getConfig",null,function(ret){console.log(ret)});//删除u下的getConfig

js

`

//c方法实现机制
function c(){
var key = arguments[0];
switch (true) {
case (typeof(key)=="undefined"):
key=null;
break;
case (typeof(key)=="function"):
key=null;
break;
case (key==""):
key=null;
break;
}
var callback,val;
//获取 回调函数 和 值
for(var i = 0 ,len=arguments.length; i < len ; i++){
if(typeof(arguments[i])=="function"){
callback=arguments[i];
}else{
if(i!=0){
val=arguments[i];
}
}
}
//如果key为json数据,直接写入并断开
if(typeof(key)=="object"&&key!=null){
//直接输入json数据,set
chrome.storage.sync.set(key, function(result){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
return;
}
var keyObj;
var keyArr=[];
//点语法处理
keyArr=(typeof(key)!="string")?[null]:key.split(".");
chrome.storage.sync.get(keyArr[0],function(result){
switch (true) {
case (typeof(val)!="undefined"):
//存在val,判断是否要清除
if(val==null){
//清除操作
if(keyArr.length>1){
//删除对象中的一个属性
var data=childMerge(keyArr,undefined,result);
chrome.storage.sync.set(data, function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
}else{
//删除整个对象
chrome.storage.sync.remove(keyArr[0], function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
});
}
return;
}
var data=childMerge(keyArr,val,result);
chrome.storage.sync.set(data, function(){
chrome.storage.sync.get(null,function(newresult){
if(typeof(callback)!="undefined"){
callback(newresult);
}else{
return newresult;
}
})
})
break;
default:
// keyArr.splice(0,1);
ret=($.isEmptyObject(result))?"":childFind(result,keyArr);
if(typeof(callback)!="undefined"){
callback(ret)
}else{
return ret;
}
}
})
}
//遍历寻找子元素
function childFind(obj,arr){
if(arr[0]==null){
return obj;
}
if(typeof(obj[arr[0]])=="undefined"){
return undefined;
}
if(arr.length==1){
return obj[arr[0]];
}
if(arr.length>1){
var linshi=arr.concat();
linshi.splice(0,1);
return childFind(obj[arr[0]],linshi)
}else{
return obj[arr[0]];
}
}
//根据数组生成对象
function childMerge(arr,val,orobj){
var obj=clone(orobj);
var linshiObj=obj;
// arr=arr.reserve();
for(var i = 0 , len = arr.length ; i < len ; i++){
var nkey=arr[i];
switch (true) {
case (i==len-1):
linshiObj[nkey]=val;
break;
default:
if(typeof(linshiObj[nkey])!="object"&&i!=len-1){
linshiObj[nkey]={};
linshiObj=linshiObj[nkey];
}else{
linshiObj=linshiObj[nkey];
}
}
}
return obj;
}
function clone(myObj){
if(typeof(myObj) != 'object' || myObj == null) return myObj;
var newObj = new Object();
for(var i in myObj){
newObj[i] = clone(myObj[i]);
}
return newObj;
}
`

chrome扩展 发送ajax请求后储存信息

manifest

{
  "name":"Catch your Data",
  "description":"Catch every data what you need",
  "version":"1.0",
  "permissions": [
    "tabs", "http://*/*", "https://*/*","http://service.miniice.cn/","storage"//storage必须有,储存权限
  ],
  "browser_action": {
      "default_title": "Get this page's Data.",
      "default_icon": "icon.png",
      "default_popup": "popup.html"
  },
  "manifest_version":2,
  "content_scripts": [
    {
      "js":["jquery-2.2.0.min.js","getnumber.js"],
      "matches":["https://sycm.taobao.com/portal/*"]//权限设置,可不设
    }
  ],
  "background": {
        "scripts": ["jquery-2.2.0.min.js","ajax.js"]
    },
  "options_page":"options.html"

}

background - ajax.js

$.post("data.php","",function(ret){
  console.log(ret);
  chrome.storage.sync.set(ret, function(){
      //do something
      console.log("缓存成功")
  });
})

 

content_scripts ?getnumber.js

chrome.storage.sync.get(null,function(result){
      console.log(result);
    })