V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
regicide
V2EX  ›  JavaScript

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

  •  
  •   regicide · 2018-07-19 16:02:14 +08:00 · 3415 次点击
    这是一个创建于 2350 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:因为最近一个需求要做一个 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;
    

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

    第 1 条附言  ·  2018-07-19 16:47:32 +08:00
    done
    Exia
        1
    Exia  
       2018-07-19 16:23:43 +08:00
    这个要什么有偿啊,ck.cookies 是个数组,获取里面的内容是应该是 ck.cookies[i].name 吧
    Exia
        2
    Exia  
       2018-07-19 16:31:11 +08:00
    @Exia 搞错了,应该是 ck.cookies[i]
    regicide
        3
    regicide  
    OP
       2018-07-19 16:33:45 +08:00
    @Exia 数据已经转成字符串去赋值了 但据我调试观察 ck.cookies.push 没有报错但也没成功 函数单独运行是提取了的
    torbrowserbridge
        4
    torbrowserbridge  
       2018-07-19 16:35:30 +08:00   ❤️ 1
    document.getElementById('cookies_name').value = ck.cookies.join(';');

    这一行放到回调函数里面去
    kualalumpur
        5
    kualalumpur  
       2018-07-19 16:35:42 +08:00   ❤️ 1
    你的賦值是沒錯的,不過 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
        6
    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
        7
    Exia  
       2018-07-19 16:40:53 +08:00   ❤️ 1
    @regicide 楼上的大佬才是对的,确实是异步了呢。
    regicide
        8
    regicide  
    OP
       2018-07-19 16:40:57 +08:00
    @torbrowserbridge
    @kualalumpur
    感谢 麻烦两位发我下支付地址 或者不方便这里填发我手机号:MTc2MDIxMjkxNjI=
    yulon
        9
    yulon  
       2018-07-19 16:41:33 +08:00   ❤️ 1
    Chrome API 基本都是异步的,所以回调还没运行时,你给 #cookies_name 的当然是空值啦。。。
    regicide
        10
    regicide  
    OP
       2018-07-19 16:47:11 +08:00
    @yulon 问题已解决 谢谢哈
    kualalumpur
        11
    kualalumpur  
       2018-07-19 16:49:46 +08:00
    @regicide 客氣了,只是注意一下許多(不是全部)的 Chrome 插件 API 中 callback 都是異步的,所以需要注意一下執行順序和作用域就好了,可以參照官方文檔:
    https://developer.chrome.com/extensions/cookies
    yulon
        12
    yulon  
       2018-07-19 16:55:47 +08:00
    @regicide 一回复才发现好多人,尴尬_(🤣」∠)_
    regicide
        13
    regicide  
    OP
       2018-07-19 17:01:23 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:11 · PVG 22:11 · LAX 06:11 · JFK 09:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.