我尝试在 Google Chrome 的新选项卡中同时打开多个链接,但失败了。
问题:
使用 this,我可以在 Firefox 中一次打开多个链接:
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" >');</script>
<link rel="stylesheet" href="style.css">
<script data-require="[email protected]" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js" data-semver="1.2.17"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="openLinks()">Open</button>
</body>
</html>
此外,我遇到有人找到了解决方法。
我尝试使用
setInterval
尝试单独打开链接,但没有成功。
您可以在普通 JavaScript 中执行此操作:
<html>
<head>
<script type="text/javascript">
function open_win() {
window.open("http://www.java2s.com/")
window.open("http://www.java2s.com/")
}
</script>
</head>
<body>
<form>
<input type=button value="Open Windows" onclick="open_win()">
</form>
</body>
</html>
这是一个更特定于 Chrome 的实现(如果弹出窗口拦截器给您带来困难):
var linkArray = []; // your links
for (var i = 0; i < linkArray.length; i++) {
// will open each link in the current window
chrome.tabs.create({
url: linkArray[i]
});
}
浏览器扩展程序可以做到这一点的原因是因为 Chrome 扩展程序可以访问特殊的 Chrome API,它可以让您使用:
chrome.windows.create({tabid: n})
其中
createData
的 tabid
值大于任何当前选项卡(您可以使用 tabid
找到最大当前 chrome.windows.getAll()
)。
但是,就在页面(或非 Chrome 扩展程序的任何地方)上执行此操作而言,这是不可能的,因为 是否在新选项卡中打开新窗口完全取决于用户的设置。
打开多个选项卡或窗口的最佳方法是使用 500 毫秒的
setTimeout()
。
window.open("https://facebook.com", "one", windowFeatures);
setTimeout(function(){
window.open("https://facebook.com", "two", windowFeatures);
}, 500);
<html>
<head>
<title></title>
<script type="text/javascript">
function open_win() {
window.open("url","windowName","windowFeatures")
window.open("url","DifferentWindowName","windowFeatures")// different name for each popup
}
</script>
</head>
<body>
<form>
<input type=button value="Open Windows" onclick="open_win()">
</form>
</body>
您需要确保每个窗口名称不同,否则最后一个弹出窗口将覆盖之前的弹出窗口。结果,您最终会看到一个弹出窗口。
function openMultipleTabs(urlsArray){
urlsArray.forEach(function(url){
let link = document.createElement('a');
link.href = url;
link.target = '_blank';
link.click();
});
}
function openMultipleTabs(urlsArray: string[]) {
urlsArray.forEach((url: string, key: number) => {
if (key === 0) {
window.open(url, `_blank_first_${key.toString()}`);
} else {
setTimeout(function () {
console.log("resolved", key);
window.open(url, `_blank_${key.toString()}`);
}, 1500 * key);
}
});
}
var str = `
https://google.com
https://google.com/mail
https://google.com/images
`;
var linkArray = str.split(/\r?\n/);
for (var i = 0; i < linkArray.length; i++) {
if (linkArray[i].length > 1) {
// will open each link in the current window
window.open(linkArray[i], '_blank')
}
}
function openTab(urls, delay, window_id, tab_position, close_time) {
var obj = {
windowId: window_id,
url: urls.shift().url,
selected: false
}
if(tab_position != null) {
obj.index = tab_position
tab_position++;
}
chrome.tabs.create(obj, function(tab) {
if(close_time > 0) {
window.setTimeout(function() {
chrome.tabs.remove(tab.id);
}, close_time*1000);
}
});
if(urls.length > 0) {
window.setTimeout(function() {openTab(urls, delay, window_id, tab_position, close_time)}, delay*1000);
}
}
如果您想查看扩展程序的代码以供参考,您可以在(适用于 Windows)
C:\Documents and Settings\*UserName*\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions
中找到扩展程序
openInfoLinks = () => {
const urlsArray = [
`https://...`,
`https://...`,
`https://...`,
]
window.open(
urlsArray[this.linkCounter],
`_blank_${someIdentifier}_${this.linkCounter}`
);
this.linkCounter++;
setTimeout(() => {
this.linkCounter = 0;
}, 500);
}
用户可以通过 ctrl+单击按钮 N 次快速连续打开链接。