qq_42635799 2018-10-10 07: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条回答

  • Go 旅城通票 2018-10-10 08: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

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能