qq_42635799 2018-10-09 23:24 采纳率: 50%
浏览 978
已结题

chrome插件中回调函数与call的用法

如下是一个下载页面内所有图片的chrome扩展代码,其中的 [].map.call是什么意思,background中的results与url参数的数据又是哪里来的?

background.js:

chrome.runtime.onInstalled.addListener(function(){
  chrome.contextMenus.create({
    'id':'saveall',
    'type':'normal',
    'title':'save all picture',
  });
});

 chrome.contextMenus.onClicked.addListener(function(info, tab){
  if(info.menuItemId == 'saveall'){
    chrome.tabs.executeScript(tab.id, {file: 'main.js'}, function(results){
      if (results && results[0] && results[0].length){
        results[0].forEach(function(url) {
          chrome.downloads.download({
            url: url,
            conflictAction: 'uniquify',
            saveAs: false
          });
        });
      }
    });
  }
});

main.js:

 [].map.call(document.getElementsByTagName('img'), function(img){
  return img.src;
});
  • 写回答

1条回答 默认 最新

  • 斯洛文尼亚旅游 2018-10-10 00:03
    关注

    map是js数组的一个方法,call用于执行方法并且改变方法执行时函数体内this指向用的,document.getElementsByTagName返回的是特殊的HTMLCollection数组,没有普通数组的map方法,无法直接调用map,所以通过 [].map.call这种形式来调用

    具体map方法参考这个:http://www.runoob.com/jsref/jsref-map.html

     results是chrome.tabs.executeScript执行成功后的回调函数,插件会自动调用这个匿名回调并传入参数值,results就是接受回调值用的变量名
    4. 3.  脚本注入
    
    
    chrome.tabs.executeScript(integer tabId, object details, function callback)
    
    
    向页面注入JavaScript 脚本执行。
    
    场合:
    如果不需要将javascript 和css注入到每一个匹配的网页里面,可以通过程序来控制代码的注入。 例如, 可以只在用户点击了一个browser action图标后才注入脚本。
    如果要将代码注入页面,扩展必须具有cross-origin 权限, 还必须可以使用chrome.tabs模块。 可以通过在manifest文件的permissions字段里声明来取得这些权限。
    
    ---------------------
    作者:多则惑少则明 
    来源:CSDN 
    原文:https://blog.csdn.net/huazhongkejidaxuezpp/article/details/50416947?utm_source=copy 
    版权声明:本文为博主原创文章,转载请附上博文链接!
    

    url是js数组forEach遍历回调函数执行时遍历到的数组当前值
    http://www.runoob.com/jsref/jsref-foreach.html

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 宝塔面板一键迁移使用不了
  • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
  • ¥15 如何单独修改下列canvas推箱子代码target参数?,插入图片代替其形状,就是哪个绿色的圆圈每关用插入的图片替代
  • ¥20 四叉树的创建和输出问题
  • ¥15 javaweb连接数据库,jsp文件加载不出来
  • ¥15 matlab关于高斯赛德尔迭代的应用编撰。(相关搜索:matlab代码|迭代法)
  • ¥15 损失匹配问题,求解答
  • ¥15 3500常用汉字书法体检测数据集下载
  • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
  • ¥15 Qt音乐播放器的音乐文件相对路径怎么写