油猴脚本(1)——解决读写在线表格的跨域问题

wils
wils

创作者俱乐部成员

"剪报"这个东西,很多00后小伙伴可能都没见过,就是把报纸上自己感兴趣的内容,用剪刀剪下来,整理粘贴到笔记本里。

其实,我们每天浏览的网页,就相当于买的报纸,当html到达你的浏览器时,你可以随意编辑、修改、裁剪你的网页,让它按你的意思展示数据,自动收发信息,过滤不想要的内容,而这里用到的工具,就是油猴脚本。


主流的浏览器,都可以在插件里安装Tampermonkey(篡改猴)

然后,可以下载一些流行到脚本来用,比如整理知乎、csdn页面,过滤微博、百度广告,小说自动翻页等等,今天先不讨论这些。


昨天,论坛里有朋友问,开发chrome插件时,需要从别的网站,发送请求到WPS在线表格的接口,但遇到跨域问题,需要在背景脚本里转发请求,才能绕过浏览器跨域限制

跨域,是指从浏览器打开某个网页,比如www.baidu.com,之后你使用fetch方法,就只能请求baidu.com提供的接口,而不能向WPS在线表格发送请求

之前,我的办法一直是,在本地开个允许跨域的cgi接口,转发这个请求

但是,昨天的朋友找到文章,说chrome插件可以跨域,我们先不去了解具体实现

既然油猴脚本也是插件,那作为专门用来改网页的工具,它一定也提供了跨域请求的办法

于是,看文档,终于发现过去忽略的重要信息:

油猴脚本,提供了一系列GM_开头的方法,对应一系列权限

简单说就是GM_xmlhttpRequest相比xmlhttpRequest,前者支持跨域(过去看的时候不求甚解,还想着,js本就可以发请求,干嘛还提供这么多GM_开头的方法。。。我还是太天真了)


👋

// ==UserScript==

// @name New Userscript

// @namespace http://tampermonkey.net/

// @version 2024-06-29

// @description try to take over the world!

// @author You

// @match https://bbs.wps.cn/

// @icon https://www.google.com/s2/favicons?sz=64&domain=wps.cn

// @grant GM_xmlhttpRequest

// @connect www.kdocs.cn

// ==/UserScript==

(function() {

'use strict';

var observer = new MutationObserver(function(mutationsList) {

for (let mutation of mutationsList) {

if (mutation.target.classList.contains('main-content')) {

let a = []

document.querySelectorAll(".topic-item").forEach(i=>{

a.push(i.querySelector(".userinfo-out").innerText)

})

GM_xmlhttpRequest({

method: "POST",

url: "https://www.kdocs.cn/api/v3/ide/file/xxx/script/yyy/sync_task",

headers: {

"Content-Type": "application/json",

"AirScript-Token": "zzz"

},

data: JSON.stringify({

Context: {

argv: {a}

}

}),

anonymous: true,

onload: function(response) {

console.log(response.status, response.responseText);

}

});

observer.disconnect();

break

}

};

});

observer.observe(document.body, { childList: true, subtree: true });

})();

有几个要点需要注意:

  • @grant添加GM_xhr权限,@connect添加目标域名

  • MutationObserver等待页面加载再执行代码

  • xxx/yyy/zzz是你的在线文档脚本令牌

  • 关键是要用anonymous: true参数,去掉请求里的cookie,否则在线文档接口拒绝访问

上面脚本的意思是,刷新wps论坛首页,自动将首页帖子作者发到在线表格,中间不需要本地开接口转发跨域请求,直接用油猴脚本提供的跨域请求方法

海南省
浏览 280
收藏
2
分享
2 +1
4
+1
全部评论 4
 
懒得批爆
懒得批爆

创作者俱乐部成员

油猴插件都是去直接获取
· 四川省
回复
wils
wils

创作者俱乐部成员

没错,下来的脚本很好用 但按自己需要,写入wps在线表格的接口这种,还是要自己写一点的,这里只是尝试跨域,且删除cookie的请求
· 海南省
回复