bfsll 发表于 2021-12-27 17:00:23

如何解决加载本地文件乱码问题?

本帖最后由 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


请问怎么解决这个问题,或者有没有其它方法也能实现?

李恒道 发表于 2021-12-27 17:00:24

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)
      }
    })

}

cxxjackie 发表于 2021-12-27 22:49:45

// ==UserScript==
//...
// @resource txt1 file:///D:/2.txt
// @grant GM_getResourceText
// ==/UserScript==

const txt = GM_getResourceText('txt1');
console.log(txt);

bfsll 发表于 2021-12-28 09:10:12

cxxjackie 发表于 2021-12-27 22:49


这种方式尝试过,不适合内容动态变化的场景,感谢

bfsll 发表于 2021-12-28 09:11:18

李恒道 发表于 2021-12-27 17:00
GM_xmlhttpRequest({
    method: "post",
    responseType:'arraybuffer',


太棒了!

李恒道 发表于 2021-12-28 09:39:17

cxxjackie 发表于 2021-12-27 22:49


大佬牛逼!
卧槽,没想到这种方法
感觉tampermonkey引入本地文件还是不太方便了,现在
我解决这个问题的时候又发现两个问题,不知道大佬碰没碰到过
1.gm_xhr获取file路径文件overrideMimeType之类的字段好像都会被自动抛弃
2.火狐疑似直接放弃了浏览器拓展访问文件的功能= =
但是如果现在浏览器对file://路径兼容这么差
tampermonkey支持外部编辑器好像没什么特别好的方法了吧....

cxxjackie 发表于 2021-12-28 11:53:30

bfsll 发表于 2021-12-28 09:10
这种方式尝试过,不适合内容动态变化的场景,感谢

我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。

cxxjackie 发表于 2021-12-28 12:02:18

李恒道 发表于 2021-12-28 09:39
大佬牛逼!
卧槽,没想到这种方法
感觉tampermonkey引入本地文件还是不太方便了,现在


我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文件这个我感觉还好,主要是自己用的时候有点麻烦,对于公开的脚本也不会用到本地文件,所以油猴支持弱一点还是可以理解,毕竟js本身不支持操作本地文件,api全靠浏览器说了算。

李恒道 发表于 2021-12-28 14:23:27

cxxjackie 发表于 2021-12-28 12:02
我也发现了overrideMimeType对本地文件不生效,不知道算不算bug,火狐没怎么用过,可能要改设置?本地文 ...

基本懂了,cxxjackie哥哥牛逼!

bfsll 发表于 2021-12-28 18:07:36

cxxjackie 发表于 2021-12-28 11:53
我试了一下是会跟着文件内容变化的啊,不知道你是什么情况,用道哥的方法也可以。 ...

我是做成了按键触发的功能调用,按一次会多进行读取2.txt文件,这种场景下,如果2.txt的内容变化了,但获取的内容还是之前的。
页: [1] 2
查看完整版本: 如何解决加载本地文件乱码问题?