如何解决加载本地文件乱码问题?
本帖最后由 bfsll 于 2021-12-27 17:08 编辑请教个问题,油猴怎么动态加载本地文件,比如2.txt,它的内容是会动态变化的。文件编码是UTF-8的
aa=中国
bb=123
我用GM_xmlhttpRequest这种方式加载,但是得到的是乱码
GM_xmlhttpRequest({
method: "post",
url: "file://D:/2.txt",
headers: { "Content-Type": "text/json,charset=utf-8" },
onload: function(r) {
console.log(r)
console.log("responseText=",(r.responseText));
console.log("responseText=",unescape(r.responseText));
}
});
responseText= aa=ä¸å½
bb=123
responseText= aa=ä¸å½
bb=123
请问怎么解决这个问题,或者有没有其它方法也能实现?
GM_xmlhttpRequest({
method: "post",
responseType:'arraybuffer',
url: "file:///C://Users/30832/Downloads/2.txt",
headers: { "Content-Type": "text/json,charset=utf-8" },
onload: async function(r) {
console.log('-----------------------')
console.log(r)
console.log("responseText=",await ab2str(r.response));
console.log("responseText=",unescape(r.responseText));
}
});
//ArrayBuffer转字符串
function ab2str(u,f) {
return new Promise((resolve,reject)=>{
var b = new Blob();
var r = new FileReader();
r.readAsText(b, 'utf-8');
r.onload = ()=>{
resolve(r.result)
}
})
}
// ==UserScript==
//...
// @resource txt1 file:///D:/2.txt
// @grant GM_getResourceText
// ==/UserScript==
const txt = GM_getResourceText('txt1');
console.log(txt); cxxjackie 发表于 2021-12-27 22:49
这种方式尝试过,不适合内容动态变化的场景,感谢 李恒道 发表于 2021-12-27 17:00
GM_xmlhttpRequest({
method: "post",
responseType:'arraybuffer',
太棒了! cxxjackie 发表于 2021-12-27 22:49
大佬牛逼!
卧槽,没想到这种方法
感觉tampermonkey引入本地文件还是不太方便了,现在
我解决这个问题的时候又发现两个问题,不知道大佬碰没碰到过
1.gm_xhr获取file路径文件overrideMimeType之类的字段好像都会被自动抛弃
2.火狐疑似直接放弃了浏览器拓展访问文件的功能= =
但是如果现在浏览器对file://路径兼容这么差
tampermonkey支持外部编辑器好像没什么特别好的方法了吧.... bfsll 发表于 2021-12-28 09:10
这种方式尝试过,不适合内容动态变化的场景,感谢
我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。 李恒道 发表于 2021-12-28 09:39
大佬牛逼!
卧槽,没想到这种方法
感觉tampermonkey引入本地文件还是不太方便了,现在
我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文件这个我感觉还好,主要是自己用的时候有点麻烦,对于公开的脚本也不会用到本地文件,所以油猴支持弱一点还是可以理解,毕竟js本身不支持操作本地文件,api全靠浏览器说了算。 cxxjackie 发表于 2021-12-28 12:02
我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文 ...
基本懂了,cxxjackie哥哥牛逼! cxxjackie 发表于 2021-12-28 11:53
我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。 ...
我是做成了按键触发的功能调用,按一次会多进行读取2.txt文件,这种场景下,如果2.txt的内容变化了,但获取的内容还是之前的。
页:
[1]
2