mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-27 13:29:34 +07:00
migrated download links to mv3
This commit is contained in:
21
api-samples/downloads/download_links/manifest.json
Normal file
21
api-samples/downloads/download_links/manifest.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Download Selected Links",
|
||||
"description": "Select links on a page and download them.",
|
||||
"version": "0.3",
|
||||
"minimum_chrome_version": "16.0.884",
|
||||
"permissions": [
|
||||
"downloads",
|
||||
"activeTab",
|
||||
"scripting"
|
||||
],
|
||||
"content_scripts":[
|
||||
{
|
||||
"matches": ["<all_urls>"],
|
||||
"js": ["send_links.js"]
|
||||
}
|
||||
],
|
||||
"action": {
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"manifest_version": 3
|
||||
}
|
||||
18
api-samples/downloads/download_links/popup.html
Normal file
18
api-samples/downloads/download_links/popup.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<script src='popup.js'></script>
|
||||
</head>
|
||||
<body>
|
||||
<input type=text id=filter placeholder=Filter>
|
||||
<input type=checkbox id=regex>
|
||||
<label for=regex>Regex</label><br>
|
||||
<button id=download0>Download All!</button>
|
||||
<table id=links>
|
||||
<tr>
|
||||
<th><input type=checkbox checked id=toggle_all></th>
|
||||
<th align=left>URL</th>
|
||||
</tr>
|
||||
</table>
|
||||
<button id=download1>Download All!</button>
|
||||
</body>
|
||||
</html>
|
||||
122
api-samples/downloads/download_links/popup.js
Normal file
122
api-samples/downloads/download_links/popup.js
Normal file
@@ -0,0 +1,122 @@
|
||||
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// This extension demonstrates using chrome.downloads.download() to
|
||||
// download URLs.
|
||||
|
||||
var allLinks = [];
|
||||
var visibleLinks = [];
|
||||
|
||||
// Display all visible links.
|
||||
function showLinks() {
|
||||
var linksTable = document.getElementById('links');
|
||||
while (linksTable.children.length > 1) {
|
||||
linksTable.removeChild(linksTable.children[linksTable.children.length - 1])
|
||||
}
|
||||
for (var i = 0; i < visibleLinks.length; ++i) {
|
||||
var row = document.createElement('tr');
|
||||
var col0 = document.createElement('td');
|
||||
var col1 = document.createElement('td');
|
||||
var checkbox = document.createElement('input');
|
||||
checkbox.checked = true;
|
||||
checkbox.type = 'checkbox';
|
||||
checkbox.id = 'check' + i;
|
||||
col0.appendChild(checkbox);
|
||||
col1.innerText = visibleLinks[i];
|
||||
col1.style.whiteSpace = 'nowrap';
|
||||
col1.onclick = function() {
|
||||
checkbox.checked = !checkbox.checked;
|
||||
}
|
||||
row.appendChild(col0);
|
||||
row.appendChild(col1);
|
||||
linksTable.appendChild(row);
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle the checked state of all visible links.
|
||||
function toggleAll() {
|
||||
var checked = document.getElementById('toggle_all').checked;
|
||||
for (var i = 0; i < visibleLinks.length; ++i) {
|
||||
document.getElementById('check' + i).checked = checked;
|
||||
}
|
||||
}
|
||||
|
||||
// Download all visible checked links.
|
||||
function downloadCheckedLinks() {
|
||||
for (var i = 0; i < visibleLinks.length; ++i) {
|
||||
if (document.getElementById('check' + i).checked) {
|
||||
chrome.downloads.download({url: visibleLinks[i]},
|
||||
function(id) {
|
||||
});
|
||||
}
|
||||
}
|
||||
window.close();
|
||||
}
|
||||
|
||||
// Re-filter allLinks into visibleLinks and reshow visibleLinks.
|
||||
function filterLinks() {
|
||||
var filterValue = document.getElementById('filter').value;
|
||||
if (document.getElementById('regex').checked) {
|
||||
visibleLinks = allLinks.filter(function(link) {
|
||||
return link.match(filterValue);
|
||||
});
|
||||
} else {
|
||||
var terms = filterValue.split(' ');
|
||||
visibleLinks = allLinks.filter(function(link) {
|
||||
for (var termI = 0; termI < terms.length; ++termI) {
|
||||
var term = terms[termI];
|
||||
if (term.length != 0) {
|
||||
var expected = (term[0] != '-');
|
||||
if (!expected) {
|
||||
term = term.substr(1);
|
||||
if (term.length == 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
var found = (-1 !== link.indexOf(term));
|
||||
if (found != expected) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
showLinks();
|
||||
}
|
||||
|
||||
// Add links to allLinks and visibleLinks, sort and show them. send_links.js is
|
||||
// injected into all frames of the active tab, so this listener may be called
|
||||
// multiple times.
|
||||
chrome.runtime.onMessage.addListener(function(links) {
|
||||
for (var index in links) {
|
||||
allLinks.push(links[index]);
|
||||
}
|
||||
allLinks.sort();
|
||||
visibleLinks = allLinks;
|
||||
showLinks();
|
||||
});
|
||||
|
||||
// Set up event handlers and inject send_links.js into all frames in the active
|
||||
// tab.
|
||||
window.onload = function() {
|
||||
document.getElementById('filter').onkeyup = filterLinks;
|
||||
document.getElementById('regex').onchange = filterLinks;
|
||||
document.getElementById('toggle_all').onchange = toggleAll;
|
||||
document.getElementById('download0').onclick = downloadCheckedLinks;
|
||||
document.getElementById('download1').onclick = downloadCheckedLinks;
|
||||
|
||||
chrome.windows.getCurrent(function (currentWindow) {
|
||||
chrome.tabs.query({active: true, windowId: currentWindow.id},
|
||||
function(activeTabs) {
|
||||
chrome.scripting.executeScript(
|
||||
{
|
||||
target: {tabId: activeTabs[0].id},
|
||||
files: ['send_links.js']
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
};
|
||||
40
api-samples/downloads/download_links/send_links.js
Normal file
40
api-samples/downloads/download_links/send_links.js
Normal file
@@ -0,0 +1,40 @@
|
||||
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Send back to the popup a sorted deduped list of valid link URLs on this page.
|
||||
// The popup injects this script into all frames in the active tab.
|
||||
|
||||
var links = [].slice.apply(document.getElementsByTagName('a'));
|
||||
links = links.map(function(element) {
|
||||
// Return an anchor's href attribute, stripping any URL fragment (hash '#').
|
||||
// If the html specifies a relative path, chrome converts it to an absolute
|
||||
// URL.
|
||||
var href = element.href;
|
||||
var hashIndex = href.indexOf('#');
|
||||
if (hashIndex >= 0) {
|
||||
href = href.substr(0, hashIndex);
|
||||
}
|
||||
return href;
|
||||
});
|
||||
|
||||
links.sort();
|
||||
|
||||
// Remove duplicates and invalid URLs.
|
||||
var kBadPrefix = 'javascript';
|
||||
for (var i = 0; i < links.length;) {
|
||||
if (((i > 0) && (links[i] == links[i - 1])) ||
|
||||
(links[i] == '') ||
|
||||
(kBadPrefix == links[i].toLowerCase().substr(0, kBadPrefix.length))) {
|
||||
links.splice(i, 1);
|
||||
} else {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(links)
|
||||
|
||||
//using runtime sendmessage to send the links to the popup
|
||||
chrome.runtime.sendMessage({
|
||||
request : links,
|
||||
});
|
||||
Reference in New Issue
Block a user