美文网首页
chrome插件开发——自动转发程序

chrome插件开发——自动转发程序

作者: 墨染丶轻尘 | 来源:发表于2017-09-22 10:57 被阅读0次

chrome插件是个挺好玩的东西,可以注入JS到网页,执行很多有趣的事情,自动化地去做很多人工去做的事情

先看下插件效果,

1.jpg 2.jpg

找到一篇想要的文章后,点击插件

3.png

自动跳转到后台并转发此文章

4.jpg 5.png

自动转发富文本

意义及前提:
这个插件是帮一个在谨和的同学做的,自动化完成转发并带有文章文字格式、表格、附件,也减少了他的工作压力
当然因为这个同学并不是程序员,所以并没有后台源码和服务器

步骤分析:
想要写小插件嘛首先要先手动能做一些事情,然后再用插件将这件事情脚本化
好了先登入同学所在公司的后台,点开F12调试工具,发布一篇文章看看

1.png

发布成功了(不得不吐槽一下,外包的网站真diao,发布成功了还返回302)
看一下他发送的数据格式


2.png

我们再自己模拟ajax在控制台试下,能不能发布成功

          var xhr = new XMLHttpRequest();
          xhr.onreadystatechange = function(data) {
            if (xhr.readyState == 4) {
                alert("转发成功")
                window.location.reload()
            }
          }
          xhr.open("POST", "/yunadmin/news/ajax.php?action=add_news", true);
          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
          xhr.send("title=${encodeURIComponent(title)}&type2=-1&author=%E7%AE%A1%E7%90%86%E5%91%98&image=&content=${encodeURIComponent(contain)}&mobile_content=&add_time=${date}&is_top=n&sort=0&status=y&click_url=n&outside_url=&pccolor=&mcolor=&submit=%E6%8F%90%E4%BA%A4");

嗯,果然成功了,现在发送文章没问题了
我们可以看到这些字段,title为标题、add_time为时间、content为内容,
发文章的方法找到了,现在只要把相应的方法写在chrome插件里就可以了

chrome有开发文档,360也翻译了一份,虽然不全但是可以看看 http://open.chrome.360.cn/html/dev_doc.html

先是配置文件
manifest.json

{
    "name": "谨和文章转发",
    "description": "自动转发文章到谨和后台系统",
    "version": "1.0",
    "permissions": [
        "http://jinheip.website6534.yizhanwei.com/*",
        "http://www.szip.gov.cn/info.aspx*",
        "http://bbs.mysipo.com/thread*",
        "http://ipms.ujs.edu.cn/show.asp?id=*",
        "http://www.jsip.gov.cn/*",
        "http://www.sipo.gov.cn/*"
    ],
    "background": {
        "scripts": [
            "background.js"
        ],
        "persistent": false
    },
    "browser_action": {
        "default_title": "谨和文章转发",
        "default_icon": "icon.png"
    },
    "manifest_version": 2
}

其中scripts为要写的脚本,default_title为插件名称、default_icon为图标,permissions为允许运行的网址名

配置文件写好之后,写我们的JS脚本
background.js

chrome.browserAction.onClicked.addListener(function(tab) {
      //这里写,插件被点击时触发的方法
});
    chrome.tabs.getSelected(function(tab){
        url = tab.url;//其中tab为当前激活tab
    })

有了当前tab,我们要想办法获取当前tab内的内容,
不过chrome似乎并没有提供相应的方法,没关系直接ajax在get一下就可以了

function fetchData(arg) {//url,method,callback
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(data) {
    if (xhr.readyState == 4) {
      if (xhr.status >= 200 && xhr.status < 300) {
        arg.callback(xhr.responseText);
      } else {
        arg.error(xhr.responseText)
      }
    }
  }
  xhr.open(arg.method, arg.url, true);
  if(arg.header){
    for(var key in arg.header){
        xhr.setRequestHeader(key, arg.header[key]);
    }
  }
  xhr.send(arg.str);
};

很普通的一段ajax,综合起来就是

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.getSelected(function (tab) {
        url = tab.url;
        fetchData({
            url: tab.url,
            method: 'GET',
            callback: {
                try{
                    parser=new DOMParser();
                    var doc = parser.parseFromString(text, "text/html");
                    var title = doc.querySelector('#lblName').innerText
                    var contain = doc.querySelector('#topcontainer table:nth-child(3) div table:nth-child(3)').innerHTML.replace(/href="\//g, 'href="http://www.szip.gov.cn/').replace(/src="\//g, 'src="http://www.szip.gov.cn/')
                    send(title, contain)//这里写调接口
                }catch(e) {
                    alert("发生错误")
                }
            },
            error: function (d) {
                alert("获取内容失败")
            }
        });
    })
});
function fetchData(arg) {//url,cookie,method,callback
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(data) {
    if (xhr.readyState == 4) {
      if (xhr.status >= 200 && xhr.status < 300) {
        arg.callback(xhr.responseText);
      } else {
        arg.error(xhr.responseText)
      }
    }
  }
  xhr.open(arg.method, arg.url, true);
  if(arg.header){
    for(var key in arg.header){
        xhr.setRequestHeader(key, arg.header[key]);
    }
  }
  xhr.send(arg.str);
};

现在我们既有了当前tab的html内容,又有了转发的post接口,接下来就很简单了,写一下上面的调接口回调
由于chrome插件的ajax也存在跨域,所以我们要先chrome.tabs.create({url:xxx,function(){})
进入后台页面之后chrome.tabs.executeScript向后台执行JS代码

function send(title,contain){
    var d = new Date()
    var date = encodeURIComponent(d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds())
    chrome.tabs.create({url:"http://jinheip.website6534.yizhanwei.com/yunadmin/news/index.php"}, function(tab){
        chrome.tabs.executeScript(null,{code:`  
          var xhr = new XMLHttpRequest();
          xhr.onreadystatechange = function(data) {
            if (xhr.readyState == 4) {
                alert("转发成功")
                window.location.reload()
            }
          }
          xhr.open("POST", "http://jinheip.website6534.yizhanwei.com/yunadmin/news/ajax.php?action=add_news", true);
          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
          xhr.send("title=${encodeURIComponent(title)}&type2=-1&author=%E7%AE%A1%E7%90%86%E5%91%98&image=&content=${encodeURIComponent(contain)}&mobile_content=&add_time=${date}&is_top=n&sort=0&status=y&click_url=n&outside_url=&pccolor=&mcolor=&submit=%E6%8F%90%E4%BA%A4");
        `})
    })
}

最后源码奉上
https://github.com/MoRanQingChen/chrome_jinhe

相关文章

  • chrome插件开发——自动转发程序

    chrome插件是个挺好玩的东西,可以注入JS到网页,执行很多有趣的事情,自动化地去做很多人工去做的事情 先看下插...

  • Mac下导出chrome插件

    Mac下导出chrome插件Chrome Extensions 插件扩展程序开发入门mac 下chrome扩展插件...

  • Chrome插件初步上手体验

    最近有接到任务需要开发一款具备自动抓取功能的chrome插件,借此机会也对chrome插件开发工作有了初步的认识,...

  • Chrome 插件开发(一)

    插件开发Hello World 具备条件,chrome浏览器,扩展程序,选择打开开发者开关 Chrome占有率更高...

  • chrome浏览器常用插件-开发人员

    作为前端开发人员,整理了一些 chrome 浏览器常用的插件(扩展程序)。chrome 应用商店插件有很多,复制名...

  • Chrome插件开发

    Chrome插件开发

  • chrome-extension-cookie 一键搞定 coo

    开发环境下用来自动获取 cookie 的 chrome 插件。输入源站点和目标站点以及 cookieName,便可...

  • 开发笔记

    最近做rails开发。 1 chrome 插件 postman这个chrome插件,用来调试api还是颇为方便的。...

  • chrome插件开发demo

    一个码云自动代码检视的插件,当然用httpclient也能做插件整体结构打开chrome的开发者模式即可使用 ma...

  • 技术开发中好用的chrome插件

    今天的主要推荐技术开发用的Chrome插件,对做技术开发的朋友很有帮助,用了这些chrome插件,开发效率可以得到...

网友评论

      本文标题:chrome插件开发——自动转发程序

      本文链接:https://www.haomeiwen.com/subject/grrwkxtx.html