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