有偿请教一个在 chrome 插件里运行 js 的问题

2018-07-19 16:02:14 +08:00
 regicide

背景:因为最近一个需求要做一个 chrome 插件 其中要用到提取某个网站的 cookie 的需求,本人是搞后端的,几乎没写过 js (勿喷...),但这个插件又要很快上
问题:现在 cookie 提取后希望赋值到 input 的 value 内,但怎么也赋值不过去(赋值给到 input 栏用来提交表单..)
代码:

var ck = {
    cookies: []
};

function getCookies() 
    {
        chrome.cookies.getAll({"url": 'https://www.example.com'}, function(cookie) {
            for(i=0;i<cookie.length;i++)
                { ck.cookies.push(cookie[i].name+'='+cookie[i].value) }
        });

        document.getElementById('cookies_name').value = ck.cookies.join(';');
    }
window.onload = getCookies;

会请最先解决问题的喝杯咖啡...或者等值红包

3212 次点击
所在节点    JavaScript
13 条回复
Exia
2018-07-19 16:23:43 +08:00
这个要什么有偿啊,ck.cookies 是个数组,获取里面的内容是应该是 ck.cookies[i].name 吧
Exia
2018-07-19 16:31:11 +08:00
@Exia 搞错了,应该是 ck.cookies[i]
regicide
2018-07-19 16:33:45 +08:00
@Exia 数据已经转成字符串去赋值了 但据我调试观察 ck.cookies.push 没有报错但也没成功 函数单独运行是提取了的
torbrowserbridge
2018-07-19 16:35:30 +08:00
document.getElementById('cookies_name').value = ck.cookies.join(';');

这一行放到回调函数里面去
kualalumpur
2018-07-19 16:35:42 +08:00
你的賦值是沒錯的,不過 Chrome 插件中的 cookies.getAll 是異步的, 所以你應該這樣寫:

(把 document.getElementById('cookies_name').value = ck.cookies.join(';'); 放到回調函數中去)
```
var ck = {
cookies: []
};

function getCookies()
{
chrome.cookies.getAll({"url": 'https://www.example.com'}, function(cookie) {
for(i=0;i<cookie.length;i++){
ck.cookies.push(cookie[i].name+'='+cookie[i].value)
}

document.getElementById('cookies_name').value = ck.cookies.join(';');
});
}
window.onload = getCookies;
```

https://paste.ubuntu.com/p/rcyrMrztV5/
Exia
2018-07-19 16:38:14 +08:00
@regicide
你试试这样写
chrome.cookies.getAll({"url": 'https://www.example.com'}, function(cookie) {
for(i=0;i<cookie.length;i++) {
var str = cookie[i].name+'='+cookie[i].value;
ck.cookies.push(str);
}
});
Exia
2018-07-19 16:40:53 +08:00
@regicide 楼上的大佬才是对的,确实是异步了呢。
regicide
2018-07-19 16:40:57 +08:00
@torbrowserbridge
@kualalumpur
感谢 麻烦两位发我下支付地址 或者不方便这里填发我手机号:MTc2MDIxMjkxNjI=
yulon
2018-07-19 16:41:33 +08:00
Chrome API 基本都是异步的,所以回调还没运行时,你给 #cookies_name 的当然是空值啦。。。
regicide
2018-07-19 16:47:11 +08:00
@yulon 问题已解决 谢谢哈
kualalumpur
2018-07-19 16:49:46 +08:00
@regicide 客氣了,只是注意一下許多(不是全部)的 Chrome 插件 API 中 callback 都是異步的,所以需要注意一下執行順序和作用域就好了,可以參照官方文檔:
https://developer.chrome.com/extensions/cookies
yulon
2018-07-19 16:55:47 +08:00
@regicide 一回复才发现好多人,尴尬_(🤣」∠)_
regicide
2018-07-19 17:01:23 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/472387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX