2 qq 42635799 qq_42635799 于 2018.10.10 15:24 提问

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

如下是一个下载页面内所有图片的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个回答

showbo
showbo   Ds   Rxr 2018.10.10 16: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

caozhy
caozhy 好详细,学习了。
6 天之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
15、JS回调函数与call函数
自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗。迅速google之,发现原来中文翻译成回调。也就是回调函数了。不懂啊,于是在google回调函数,发现网上的中文解释实在是太“深奥”了,我承认自己才疏学浅了。看了几个回调的例子后,貌似有点理解了。下面是我对回调函数的理解,要是理解错了,请指正,不甚感激。         首先还是从jquery网站上的英文定义入手,
再谈js回调函数callback
1、背景 Javascript中的回调函数,相信大家都不陌生,最明显的例子是做Ajax请求时,提供的回调函数, 实际上DOM节点的事件处理方法(onclick,ondblclick等)也是回调函数。 在使用DWR的时候,回调函数可以作为第一个或者最后一个参数出现,如:JScript code <!--Code highlighting produced by Actipro Cod
关于Meteor.call( )同步/异步的思考
meteor 的methods的调用方法是Meteor.call( )关于Meteor.call( )的使用有两种:1.Meteor.call('fun',1,2,function(err,result){ .........} )2.Meteor.call('fun',1,2 )        这两种方式是有区别的。在call中指定回调函数时,这个调用就是异步的,不会阻塞后面的代码。而不知道回调...
JdbcTemplate 使用了模版模式和回调函数:
JdbcTeplate
js 回调函数 3种用法
js 回调函数大致有以下三种用法, 1,直接回调 2,call回调 3,apply回调 回调函数作用得当,减少代码冗余,代码可读性增强,代码维护也轻松很多。 什么要用到回调函数呢? 当有很多地方需要调用同一个函数,并且这一函数根据不同的需要,作不同的处理,这个时候用回调函数就特别合适了。 一,直接回调 function son () { alert('tank t
js回调函数和作用域的一些简单用法
var name1 = { hello : "This is hello.", ff:{ hello: "zhangsan", vv:function(fn){                      console.log(this.hello);                      fn.apply(this,Array.prototype.slice.call(argum
PHP回调函数的实现方法 处理事件
目录       前言       全局函数的回调       类静态函数的回调       对象的方法的回调       PHP事件模型(观察者模式)的实现思路      前言     最近在开发一个PHP系统,为了提高系统的扩展性,我想在系统中加入类似Javascript的事件处理机制,例如:我想在一篇新闻被添加以后,我想记录一下日志,用类似Javascript的代
C++函数指针
C++编程语言中函数指针常见用法:函数调用及回调函数中的使用。
什么是回调机制(Call back)
回调机制(一个动词词组,Call back)是指编写框架/类库时程序员所需要的、系统让上层模块提供代码的机制。
NodeJS 回调函数中的this
NodeJS 语法其实就是javascript的语法,前者不过是增加了一些JS的库而已, 最近在看Nodejs 实战这本书,有些东西写的不错就摘抄下来了备查。 切入正题,请看下面一段代码: var fs=require('fs'); function FileObject() { this.filename=""; this.file_exists=function (callback){