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

1个回答

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

1
caozhy
caozhy 好详细,学习了。
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的。是时候展现真正的技术了!
其他相关推荐
15、JS回调函数与call函数
自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗。迅速google之,发现原来中文翻译成回调。也就是回调函数了。不懂啊,于是在google回调函数,发现网上的中文解释实在是太“深奥”了,我承认自己才疏学浅了。看了几个回调的例子后,貌似有点理解了。下面是我对回调函数的理解,要是理解错了,请指正,不甚感激。         首先还是从jquery网站上的英文定义入手,
js 回调函数 3种用法
js 回调函数大致有以下三种用法, 1,直接回调 2,call回调 3,apply回调 回调函数作用得当,减少代码冗余,代码可读性增强,代码维护也轻松很多。 什么要用到回调函数呢? 当有很多地方需要调用同一个函数,并且这一函数根据不同的需要,作不同的处理,这个时候用回调函数就特别合适了。 一,直接回调 function son () { alert('tank t
玩转VC++实现CallBack
题目有点大,其实本文只是要DEMO一下用函数指针在VC++实现回调。 一、函数指针 那么什么是函数指针呢?说白了就是指向函数的指针,它是一个变量。 通常,函数会被编译为一段二进制机器码。每个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。 可以把函数的这个首地址(入口地址)赋予一个指针变量,使该指针变量指向该函数。 那么就可以通过该指针变量就可以找到并且调用这个函数了
js中的call()和apply()方法
1.call() 语法:obj1.call(obj2[,param1,param2,...]) 定义:用obj2对象来代替obj1,调用obj1的方法。即将obj1应用到obj2上。 说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 obj2 指定的新对象。 如果没有提供 obj2参数,那么 Global 对象被用作 obj
什么是回调机制(Call back)
回调机制(一个动词词组,Call back)是指编写框架/类库时程序员所需要的、系统让上层模块提供代码的机制。
C++函数指针
C++编程语言中函数指针常见用法:函数调用及回调函数中的使用。
回调函数的应用
回调函数的应用,了解回调函数的用法学习回调函数的思想
什么是回调函数(callback function)
生动的描述: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
js中call与apply的用法小结
js中call与apply的用法小结 本篇文章主要是对js中call与apply的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目,尽管在365天前用过call方法,但当时还是没能答上来,今天深入总结一下 call和apply,它们的作用都是将函数绑定到另外一个对象上去运行 两
JS中回调函数(callback)理解
前言 今天有个刚入行的小兄弟问到了回调函数,讲解了一番以后觉得不能白讲,得把这些东西记下来,虽然很基础。。。 介绍 首先从英文介绍开始 A callback is a function that is passed as an argument to another function and is executed after its parent function has complet...
关于Meteor.call( )同步/异步的思考
meteor 的methods的调用方法是Meteor.call( )关于Meteor.call( )的使用有两种:1.Meteor.call('fun',1,2,function(err,result){ .........} )2.Meteor.call('fun',1,2 )        这两种方式是有区别的。在call中指定回调函数时,这个调用就是异步的,不会阻塞后面的代码。而不知道回调...
js中的call()方法的使用实例
call方法 $(document).ready(function(){ }) $().ready(function(){ //do something }) //参考:http://uule.iteye.com/blog/1158829 $(function(){ //------------1.常例-------------- function add(a,b
JdbcTemplate 使用了模版模式和回调函数:
JdbcTeplate
exec 和 call 用法详解
http://www.111cn.net/database/Oracle/39433.htm exec 和 call 用法详解 exec 和 call 执行一个procedure时,  declare s_in     varchar2(30):= '   where   col=13 ' '; v_sql_str       varchar2(200); begin   v
call()的用法
转自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法. 注意:该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干
回调函数(CallBack)
首先声明,回调函数并不是一种特殊的函数结构,而指的是利用函数指针来回调写好的函数的一种使用方法。 1.回调函数是什么其具体实现是使用者自己定义一个函数,并且使用者自己实现这个函数的程序内容,然后将自己的函数作为参数传入别人的函数中,由别人的系统函数在运行时调用。简单地说也就是—-由别人的函数运行期间来回调你实现的函数。别人并不关心你的函数的具体实现,只知道在什么时候调用你的函数;而你知道你的函数的
C++学习:回调函数(callback)
C++学习:回调函数(callback)简介: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应 可能这些概念性的东西不是太好理解,通俗一点,回调函数就是在两个独立函
JS中call用法理解
call()方法是借用构造函数来实现继承,即在子类型构造函数的内部调用超类型构造函数。 我理解的call()的作用就是改变上下文,即在以下代码中的 function subtype(){ superType.call(this, "Tom"); this.age = 11; } 相当于 function subtype(){ this.name
Java回调函数的用法
package com.cy.test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class WorkImpl { public void work(CallBack callBack) { System.out.println("work s
JS中的call()方法和apply()方法用法总结
JacvaScript中的call()方法和apply()方法, 1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。 2. 相同点:这两个方法的作用是一样的。都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
vue中使用回调函数,this调用无效
let self = this //使用新变量替换this,以免this无效//updateStudentInfoToServer是一个将本身部分数据异步上传的接口,this.updateStudentInfoToServer(this,   function(res){    console.log('return ok')    console.log(res)    // console.l...
Js中apply与call的区别与用法
解析:apply与call是更改对象的内部指针,即改变对象的this指向的内容。 call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。 参数区别:apply传入的必须是一个参数数组,也就是将多个参数组合成为一个数组传入,而call没有此限制。
Ajax里应用回调函数(callback)
var menuId = $("ul.nav").first().attr("id"); var request = $.ajax({  url: "script.php",  type: "POST",  data: {id : menuId},  dataType: "html" }); //调用成功时的回调处理 request.do
simulink回调函数
常见的应用场合: 打开模型时,自动加载变量到工作空间 双击模块时执行脚本 仿真开始前进行参数初始化 仿真结束后将仿真数据绘制图像 关闭模型时清除相关变量或关闭图像 代码:输入到command window中,会在模型运行时,显示回调函数的类型和顺序。set_param(0,'CallbackTracing','on')
call()与apply()的用法与区别
ECMAScript中的函数是对象,因此函数也有属性与方法。每个函数都包含两个非继承而来的方法:apply()和call()。这两个方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内this的对象的值。一、apply()方法apply()方法接受两个两个参数:一个是在其中运行函数的作用域,另一个是参数数组。其中第二个参数可以是Array的实例,也可以是arguments对象      ...
初识回调函数
回调函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
Call命令使用方法
Call命令在批处理中作用很大,它可以在一个批处理程序(父批处理程序)中调用另一个或多个批处理程序(子批处理程序),且不终止父批处理程序。这是用Start命令或直接调用子批处理程序的文件名(编辑时包括绝对路径)等方法无法比及的。下面我不讲语法,只讲实际操作,让大家有一个更清楚的认识。         例如,在桌面创建一个批处理程序5.cmd(或5.bat),批处理的内容如下: @ech
VB中,使用Call与不使用它的区别
  讨论它们的区别源自一处代码:Sheet1.Cells(2,1).CopyFromRecordset(Rs) Rs为一个ADO.Recordset对象。我发现它不能运行,但是在调用前加上了Call,就可以运行了。这个问题困扰了我很久,都是因为不求甚解,结果发现早晚会出问题。  经查阅相关资料,特将VB的Sub和Function调用语法总结如下:1、Call SubA(P1,P2
call 不可以使用在plsql中,只能在sql*plus中使用。
转载地址 :http://warehouse.itpub.net/post/777/488171 call 不可以使用在plsql中,只能在sqlplus中使用。 SQL> create or replace procedure proc_test 2 is 3 v_count number; 4 begin 5 select count(*) into v_count from
jquery.sort——表格排序插件
原文地址:点击打开链接 首先声明:原创并不是本人, 但本人在原创的基础上做了较大的修改: 1. 添加了卸载函数 unsort , 从而能在表格数据反复变动(AJAX 页面是经常用到的)的情况下使用—— $table.unsort().sort(); 2. 适应IE6。  原文中用图片地址来判断图片, 但有些浏览器出错。 3. 极力缩减代码行数,使之简短。 再次感谢ZouHao ,
JavaScript中call()函数详细用法
call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。注意:该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。语法fun.call(thisArg, arg1, arg2, ...)参数thisArg在fun函数运行时指定的this值。需要注意的是,指定的...
call跟apply以及回调函数callback
  apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.    Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 args:这个是数组,它将作为参数传给Function(args-->arguments)  call:和apply的意思一样,只不过是参数列表不一样.  Function.ca...
如何理解回调函数 CallBack
如果是初次接触Windows程序的人,一般理解回调函数觉得非常困难,笔者下面非常简单的程序剥开回调函数的真面目。 笔者使用的编译器是VS2008,所以有这行代码 #include "stdafx.h", // TestConsole.cpp : Defines the entry point for the console application. // #include "stda
汇编语言入门:CALL和RET的配合使用(一)
本系列教程完全参照王爽《汇编语言(第三版)》,这本书对call、ret指令做了相当一部分的讲解,其重要性可见一斑 从栈的角度分析call和ret 分析以下代码 ...
回调函数基本介绍和基本使用场景
1.回调函数基本定义- 什么是函数指针 通俗来说,函数指针是一个指向特定函数的指针。函数的类型由其参数及返回类型共同决定,与函数具体名称无关。示例代码如下: int testFun1(int param1,long param2,float param3); //普通函数定义 该函数的类型为int(int,long,float),...
JS的call方法的作用解释,简单易懂
先看看关于call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,看了这样的解释,或许让你更摸不着头脑了。看例子: var x = "我是全局变量";    //定义全局变量x function a(){         //定义函数类结构a   this.x = "我是在函数类结构a中声明的哦"; } //定义普通函数,弹出当前指针所包含的变量x
call指令用法
CPU执行call指令时,进行两步操作: 1、将当前的IP或CS和IP压入栈中; 2、转移; call指令不能实现短转移。与jmp指令实现转移的原理相同。     1、依据位移进行转移的call指令      指令形式:call   标号      进行如下操作:          (1)、sp=sp-2          (2)、ss*16+sp=ip          (
回调函数(callback)浅析
编程一段时间之后,都会或多或少的接触到“回调函数”的概念,我对这个概念的理解也是浅尝辄止,就此分享一些浅见。 "软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过
JavaScript中apply与call的用法意义及区别
call()和apply的区别
rxJava的使用--Observable的创建及源码分析(一)
最近新开的项目需要用到rxJava.在网上找了一下资料,感觉资料好少,有一些资料虽然有例子,但例子都好复杂,对一个新手来说操作是挺麻烦的.因此,本人根据自己的理解写了一些例子.因此写下了本文,给记忆力不好的自己,留作复习用,也希望能帮助大家吧.        本文的讲解顺序是根据ReactiveX文档中文翻译来写的,因为该文档已经把一些概念性的东西讲得很清楚了,因此在这里我就不再进行讲述.如果有需