ฉันพยายามเปิดURLในแท็บใหม่ตรงข้ามกับหน้าต่างป๊อปอัป
ฉันเคยเห็นคำถามที่เกี่ยวข้องซึ่งคำตอบจะเป็นอย่างไร:
window.open(url,'_blank');
window.open(url);
แต่ไม่มีใครทำงานให้ฉันเบราว์เซอร์ยังคงพยายามเปิดหน้าต่างป๊อปอัป
ฉันพยายามเปิดURLในแท็บใหม่ตรงข้ามกับหน้าต่างป๊อปอัป
ฉันเคยเห็นคำถามที่เกี่ยวข้องซึ่งคำตอบจะเป็นอย่างไร:
window.open(url,'_blank');
window.open(url);
แต่ไม่มีใครทำงานให้ฉันเบราว์เซอร์ยังคงพยายามเปิดหน้าต่างป๊อปอัป
คำตอบ:
ไม่มีสิ่งใดที่ผู้เขียนสามารถทำได้เพื่อเลือกเปิดในแท็บใหม่แทนที่จะเป็นหน้าต่างใหม่ มันเป็นความต้องการของผู้ใช้ (โปรดทราบว่าการตั้งค่าเริ่มต้นของผู้ใช้ในเบราว์เซอร์ส่วนใหญ่มีไว้สำหรับแท็บใหม่ดังนั้นการทดสอบเล็กน้อยในเบราว์เซอร์ที่ไม่ได้เปลี่ยนค่ากำหนดนั้นจะไม่แสดงสิ่งนี้)
CSS3 เสนอเป้าหมายใหม่แต่สเปคที่ถูกทอดทิ้ง
การย้อนกลับไม่เป็นความจริง โดยการระบุมิติสำหรับหน้าต่างในอาร์กิวเมนต์ที่สามของwindow.open()
คุณสามารถเรียกหน้าต่างใหม่เมื่อการตั้งค่าสำหรับแท็บ
window.open
จะบอกให้เบราว์เซอร์เปิดสิ่งใหม่ ๆ จากนั้นเบราว์เซอร์จะเปิดสิ่งที่เลือกไว้ในการตั้งค่า - แท็บหรือหน้าต่าง ในเบราว์เซอร์ที่คุณทดสอบให้เปลี่ยนการตั้งค่าเพื่อเปิดในหน้าต่างใหม่แทนแท็บและคุณจะเห็นว่าโซลูชันของผู้อื่นนั้นไม่ถูกต้อง
นี่คือเคล็ดลับ
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
ในกรณีส่วนใหญ่สิ่งนี้ควรเกิดขึ้นโดยตรงในonclick
ตัวจัดการสำหรับลิงก์เพื่อป้องกันตัวบล็อกป็อปอัพและพฤติกรรม "หน้าต่างใหม่" เริ่มต้น คุณสามารถทำได้ด้วยวิธีนี้หรือโดยการเพิ่มฟังเหตุการณ์ไปยังDOM
วัตถุ ของคุณ
<div onclick="openInNewTab('www.test.com');">Something To Click On</div>
http://www.tutsplanet.com/open-url-new-tab-using-javascript/
window.open()
จะไม่เปิดในแท็บใหม่หากไม่ได้เกิดขึ้นกับเหตุการณ์การคลิกจริง ในตัวอย่างที่ระบุ URL จะถูกเปิดในเหตุการณ์คลิกจริง งานนี้จะมีให้ผู้ใช้มีการตั้งค่าที่เหมาะสมในเบราว์เซอร์
<a class="link">Link</a>
<script type="text/javascript">
$("a.link").on("click",function(){
window.open('www.yourdomain.com','_blank');
});
</script>
ในทำนองเดียวกันหากคุณพยายามโทร Ajax ภายในฟังก์ชั่นคลิกและต้องการเปิดหน้าต่างสู่ความสำเร็จตรวจสอบให้แน่ใจว่าคุณกำลังทำการโทร Ajax ด้วยasync : false
ชุดตัวเลือก
async: false
ไม่ทำงานใน Chrome ในการเปิดหน้าต่างใหม่จากการโทรกลับคุณต้องเปิดหน้าต่างว่างก่อนส่งคำขอ HTTP และอัปเดตในภายหลัง นี่คือสับดี
window.open
ไม่สามารถเปิดป๊อปอัปในแท็บใหม่ในเบราว์เซอร์ทั้งหมดได้อย่างน่าเชื่อถือเบราว์เซอร์ที่แตกต่างกันใช้พฤติกรรม window.open
ในรูปแบบที่แตกต่างกันโดยเฉพาะอย่างยิ่งเกี่ยวกับการตั้งค่าเบราว์เซอร์ของผู้ใช้ คุณไม่สามารถคาดหวังได้ว่าพฤติกรรมแบบเดียวกันนี้window.open
จะเป็นจริงใน Internet Explorer, Firefox และ Chrome ทั้งหมดเนื่องจากวิธีการที่แตกต่างกันในการจัดการการตั้งค่าเบราว์เซอร์ของผู้ใช้
ยกตัวอย่างเช่น Internet Explorer (11) ผู้ใช้สามารถเลือกที่จะป๊อปอัพที่เปิดในหน้าต่างใหม่หรือแท็บใหม่คุณไม่สามารถบังคับให้ Internet Explorer ผู้ใช้ 11 คนที่จะป๊อปอัพที่เปิดในวิธีการบางอย่างผ่าน window.open
เป็นพาดพิงถึงในคำตอบของเควนติน
สำหรับผู้ใช้ Firefox (29) การใช้window.open(url, '_blank')
ขึ้นอยู่กับการตั้งค่าแท็บของเบราว์เซอร์แม้ว่าคุณจะยังสามารถบังคับให้พวกเขาเปิดป๊อปอัปในหน้าต่างใหม่โดยการระบุความกว้างและความสูง (ดูหัวข้อ "What About Chrome?" ด้านล่าง)
ไปที่การตั้งค่าเบราว์เซอร์ของคุณและกำหนดค่าให้เปิดป๊อปอัปในหน้าต่างใหม่
หลังจากตั้งค่า Internet Explorer (11) เพื่อเปิดป๊อปอัปในหน้าต่างใหม่ดังที่แสดงด้านบนให้ใช้หน้าทดสอบต่อไปนี้เพื่อทดสอบwindow.open
:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814');">
<code>window.open(url)</code>
</button>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', '_blank');">
<code>window.open(url, '_blank')</code>
</button>
</body>
</html>
สังเกตว่าป๊อปอัปเปิดขึ้นในหน้าต่างใหม่ไม่ใช่แท็บใหม่
คุณยังสามารถทดสอบตัวอย่างข้อมูลด้านบนใน Firefox (29) ด้วยการตั้งค่าแท็บที่ตั้งค่าเป็นหน้าต่างใหม่และดูผลลัพธ์เดียวกัน
window.open
แตกต่างจาก Internet Explorer (11) และ Firefox (29)ฉันไม่แน่ใจ 100% แต่ดูเหมือนว่า Chrome (รุ่น34.0.1847.131 m
) ไม่มีการตั้งค่าใด ๆ ที่ผู้ใช้สามารถเลือกได้ว่าจะเปิดป๊อปอัปในหน้าต่างใหม่หรือแท็บใหม่ (เช่น Firefox และ Internet Explorer) มี). ฉันตรวจสอบเอกสารของ Chrome เพื่อจัดการป๊อปอัปแต่ไม่ได้พูดถึงสิ่งใด ๆ
นอกจากนี้ อีกครั้งเบราว์เซอร์ที่แตกต่างกันดูเหมือนจะใช้ลักษณะการทำงานของ window.open
ที่แตกต่างกัน ใน Chrome และ Firefox การระบุความกว้างและความสูงจะบังคับให้ป๊อปอัปแม้ว่าผู้ใช้ตั้งค่า Firefox (29) เพื่อเปิดหน้าต่างใหม่ในแท็บใหม่ (ดังที่ได้กล่าวไว้ในคำตอบของJavaScript ที่เปิดในหน้าต่างใหม่ไม่ใช่แท็บ ) :
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<button onclick="window.open('https://stackoverflow.com/q/4907843/456814', 'test', 'width=400, height=400');">
<code>window.open(url)</code>
</button>
</body>
</html>
อย่างไรก็ตามข้อมูลโค้ดเดียวกันข้างต้นจะเปิดแท็บใหม่ใน Internet Explorer 11 เสมอหากผู้ใช้ตั้งค่าแท็บเป็นการตั้งค่าเบราว์เซอร์ของพวกเขาไม่ได้ระบุความกว้างและความสูงจะบังคับให้ป๊อปอัปหน้าต่างใหม่สำหรับพวกเขา
ดังนั้นพฤติกรรมของwindow.open
ใน Chrome จึงดูเหมือนว่าจะเปิดป๊อปอัปในแท็บใหม่เมื่อใช้ในonclick
เหตุการณ์เปิดในหน้าต่างใหม่เมื่อใช้จากคอนโซลของเบราว์เซอร์ ( ดังที่คนอื่น ๆ สังเกต ) และเปิดในหน้าต่างใหม่เมื่อ ระบุด้วยความกว้างและความสูง
เบราว์เซอร์ที่ต่างกันใช้พฤติกรรมที่ window.open
แตกต่างกันตามการตั้งค่าเบราว์เซอร์ของผู้ใช้ คุณไม่สามารถคาดหวังได้ว่าพฤติกรรมแบบเดียวกันนี้window.open
จะเป็นจริงใน Internet Explorer, Firefox และ Chrome ทั้งหมดเนื่องจากวิธีการที่แตกต่างกันในการจัดการการตั้งค่าเบราว์เซอร์ของผู้ใช้
window.open
เอกสารหนึ่งในสายการบิน:
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
มันสร้างa
องค์ประกอบเสมือนให้มันtarget="_blank"
เพื่อที่จะเปิดในแท็บใหม่ให้มันถูกต้องurl
href
แล้วคลิกมัน
และถ้าคุณต้องการตามที่คุณสามารถสร้างฟังก์ชั่นบางอย่าง:
function openInNewTab(href) {
Object.assign(document.createElement('a'), {
target: '_blank',
href,
}).click();
}
แล้วคุณสามารถใช้มันเช่น:
openInNewTab("https://google.com");
โน๊ตสำคัญ:
openInNewTab
(รวมถึงโซลูชันอื่น ๆ ในหน้านี้) จะต้องถูกเรียกในระหว่างการติดต่อกลับของผู้ใช้ - เช่น คลิกภายในเหตุการณ์ (ไม่จำเป็นในฟังก์ชั่นการโทรกลับโดยตรง แต่ในระหว่างการดำเนินการคลิก)
หากคุณจะโทรหาด้วยตนเองในบางช่วงเวลาแบบสุ่ม (เช่นภายในช่วงเวลาหรือหลังจากการตอบกลับของเซิร์ฟเวอร์) - เบราว์เซอร์อาจถูกปิดกั้น (ซึ่งสมเหตุสมผลเนื่องจากเป็นความเสี่ยงด้านความปลอดภัยและอาจนำไปสู่ประสบการณ์การใช้งานที่แย่มาก )
$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
หากคุณใช้window.open(url, '_blank')
มันจะถูกบล็อก (ตัวป้องกันป๊อปอัป) ใน Chrome
ลองสิ่งนี้:
//With JQuery
$('#myButton').click(function () {
var redirectWindow = window.open('http://google.com', '_blank');
redirectWindow.location;
});
ด้วยจาวาสคริปต์ที่บริสุทธิ์
document.querySelector('#myButton').onclick = function() {
var redirectWindow = window.open('http://google.com', '_blank');
redirectWindow.location;
};
the request was made in a sandboxed frame whose 'allow-popups' permission is not set
เพื่ออธิบายคำตอบของสตีเวนสปีลเบิร์กอย่างละเอียดฉันทำสิ่งนี้ในกรณีเช่นนี้:
$('a').click(function() {
$(this).attr('target', '_blank');
});
ด้วยวิธีนี้ก่อนที่เบราว์เซอร์จะตามลิงก์ฉันกำลังตั้งค่าแอตทริบิวต์เป้าหมายดังนั้นมันจะทำให้ลิงก์เปิดในแท็บหรือหน้าต่างใหม่ ( ขึ้นอยู่กับการตั้งค่าของผู้ใช้ )
ตัวอย่างหนึ่งบรรทัดใน jQuery:
$('a').attr('target', '_blank').get(0).click();
// The `.get(0)` must be there to return the actual DOM element.
// Doing `.click()` on the jQuery object for it did not work.
สิ่งนี้สามารถทำได้โดยใช้ DOM API ของเบราว์เซอร์ดั้งเดิมเช่นกัน:
document.querySelector('a').setAttribute('target', '_blank');
document.querySelector('a').click();
ฉันใช้สิ่งต่อไปนี้และใช้งานได้ดีมาก!
window.open(url, '_blank').focus();
ฉันคิดว่าคุณไม่สามารถควบคุมสิ่งนี้ได้ หากผู้ใช้ตั้งค่าเบราว์เซอร์ให้เปิดลิงก์ในหน้าต่างใหม่คุณจะไม่สามารถบังคับให้เปิดลิงก์ในแท็บใหม่ได้
ข้อเท็จจริงที่น่าสนใจคือแท็บใหม่ไม่สามารถเปิดได้หากผู้ใช้ไม่ได้เรียกใช้การกระทำ (คลิกที่ปุ่มหรืออะไรบางอย่าง) หรือถ้าเป็นแบบอะซิงโครนัสตัวอย่างเช่นสิ่งนี้จะไม่เปิดในแท็บใหม่:
$.ajax({
url: "url",
type: "POST",
success: function() {
window.open('url', '_blank');
}
});
แต่สิ่งนี้อาจเปิดในแท็บใหม่ขึ้นอยู่กับการตั้งค่าเบราว์เซอร์:
$.ajax({
url: "url",
type: "POST",
async: false,
success: function() {
window.open('url', '_blank');
}
});
<script>open('http://google.com')</script>
ลงใน.html
ไฟล์และเปิดในการติดตั้ง Firefox เวอร์ชันใหม่ล่าสุด คุณจะสังเกตเห็นว่า Firefox เปิด Google อย่างมีความสุขในแท็บใหม่ (บางทีหลังจากที่คุณบอกให้อนุญาตป๊อปอัป) ไม่ใช่หน้าต่างใหม่
เพียงแค่ละเว้นพารามิเตอร์ [strWindowFeatures] จะเปิดแท็บใหม่ยกเว้นการแทนที่การตั้งค่าเบราว์เซอร์ (การตั้งค่าเบราว์เซอร์สำคัญกว่า JavaScript)
var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);
var myWin = window.open(strUrl, strWindowName);
-- หรือ --
var myWin = window.open(strUrl);
(function(a){
document.body.appendChild(a);
a.setAttribute('href', location.href);
a.dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
return e
}(document.createEvent('MouseEvents'))))}(document.createElement('a')))
คุณสามารถใช้เคล็ดลับกับform
:
$(function () {
$('#btn').click(function () {
openNewTab("http://stackoverflow.com")
return false;
});
});
function openNewTab(link) {
var frm = $('<form method="get" action="' + link + '" target="_blank"></form>')
$("body").append(frm);
frm.submit().remove();
}
name
คีย์ & value
เป็นค่าสำหรับพารามิเตอร์ทั้งหมดที่อยู่ในแบบสอบถาม Params จากนั้นส่งแบบฟอร์ม
a
แท็กแทนแบบฟอร์มและใช้.click()
วิธีjQuery เพื่อ "ส่ง" ตรวจสอบคำตอบของฉัน
สิ่งนี้ไม่เกี่ยวกับการตั้งค่าเบราว์เซอร์หากคุณพยายามเปิดแท็บใหม่จากฟังก์ชั่นที่กำหนดเอง
ในหน้านี้เปิดคอนโซล JavaScript และประเภท:
document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();
และจะพยายามเปิดป๊อปอัปโดยไม่คำนึงถึงการตั้งค่าของคุณเนื่องจาก 'คลิก' มาจากการกระทำที่กำหนดเอง
ในการที่จะทำตัวเหมือน 'การคลิกเม้าส์' ที่ลิงค์คุณต้องทำตามคำแนะนำของ @ spirinvladimirและสร้างมันขึ้นมาจริงๆ :
document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
false, false, false, false, 0, null);
return e
}(document.createEvent('MouseEvents'))));
นี่เป็นตัวอย่างที่สมบูรณ์ (อย่าลองใช้กับjsFiddleหรือบรรณาธิการออนไลน์ที่คล้ายกันเพราะมันจะไม่ยอมให้คุณเปลี่ยนเส้นทางไปยังหน้าภายนอกจากที่นั่น):
<!DOCTYPE html>
<html>
<head>
<style>
#firing_div {
margin-top: 15px;
width: 250px;
border: 1px solid blue;
text-align: center;
}
</style>
</head>
<body>
<a id="my_link" href="http://www.google.com"> Go to Google </a>
<div id="firing_div"> Click me to trigger custom click </div>
</body>
<script>
function fire_custom_click() {
alert("firing click!");
document.getElementById("my_link").dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, /* type, canBubble, cancelable, view */
0, 0, 0, 0, 0, /* detail, screenX, screenY, clientX, clientY */
false, false, false, false, /* ctrlKey, altKey, shiftKey, metaKey */
0, null); /* button, relatedTarget */
return e
}(document.createEvent('MouseEvents'))));
}
document.getElementById("firing_div").onclick = fire_custom_click;
</script>
</html>
w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
ตามtheandystratton.com/2012/...
function openTab(url) {
const link = document.createElement('a');
link.href = url;
link.target = '_blank';
document.body.appendChild(link);
link.click();
link.remove();
}
JQuery
$('<a />',{'href': url, 'target': '_blank'}).get(0).click();
JS
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
หรือคุณเพียงแค่สร้างองค์ประกอบลิงก์และคลิกที่ ...
var evLink = document.createElement('a');
evLink.href = 'http://' + strUrl;
evLink.target = '_blank';
document.body.appendChild(evLink);
evLink.click();
// Now delete it
evLink.parentNode.removeChild(evLink);
สิ่งนี้ไม่ควรถูกบล็อคโดยตัวบล็อคป๊อปอัพใด ๆ ... หวังว่า
ฉันพบว่าง่ายต่อการแก้ไข:
ขั้นตอนที่ 1: สร้างลิงค์ที่มองไม่เห็น:
<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>
ขั้นตอนที่ 2: คลิกที่ลิงค์นั้นโดยทางโปรแกรม:
document.getElementById("yourId").click();
ไปเลย! ใช้งานได้มีเสน่ห์สำหรับฉัน
ฉันค้นคว้าข้อมูลมากมายเกี่ยวกับวิธีเปิดแท็บใหม่และอยู่ในแท็บเดียวกัน ฉันได้พบเคล็ดลับเล็ก ๆ น้อย ๆ ที่จะทำมัน สมมติว่าคุณมี URL ที่คุณต้องเปิด - newUrlและ url เก่า - currentUrlซึ่งคุณต้องเปิดใช้งานหลังจากเปิดแท็บใหม่ รหัส JS จะมีลักษณะคล้ายกับสิ่งต่อไปนี้:
// init urls
let newUrl = 'http://example.com';
let currentUrl = window.location.href;
// open window with url of current page, you will be automatically moved
// by browser to a new opened tab. It will look like your page is reloaded
// and you will stay on same page but with new page opened
window.open(currentUrl , '_blank');
// on your current tab will be opened new url
location.href = newUrl;
วิธีการเกี่ยวกับการสร้าง<a>
ด้วย_blank
เป็นtarget
ค่าคุณลักษณะและurl
เป็นhref
พร้อมกับการแสดงสไตล์: ซ่อนด้วยองค์ประกอบเด็ก ๆ จากนั้นเพิ่มใน DOM แล้วทริกเกอร์เหตุการณ์คลิกบนองค์ประกอบย่อย
ไม่ได้ผล เบราว์เซอร์ป้องกันพฤติกรรมเริ่มต้น มันอาจถูกเรียกใช้โดยทางโปรแกรม แต่มันไม่เป็นไปตามพฤติกรรมเริ่มต้น
ตรวจสอบและดูด้วยตัวคุณเอง: http://jsfiddle.net/4S4ET/
การเปิดแท็บใหม่จากภายในส่วนขยาย Firefox (Mozilla) จะเป็นดังนี้:
gBrowser.selectedTab = gBrowser.addTab("http://example.com");
วิธีนี้คล้ายกับโซลูชันด้านบน แต่ใช้งานแตกต่างกัน
.social_icon -> บางคลาสที่มี CSS
<div class="social_icon" id="SOME_ID" data-url="SOME_URL"></div>
$('.social_icon').click(function(){
var url = $(this).attr('data-url');
var win = window.open(url, '_blank'); ///similar to above solution
win.focus();
});
นี่อาจเป็นการแฮก แต่ใน Firefox หากคุณระบุพารามิเตอร์ตัวที่สามคือ 'fullscreen = ใช่' จะเป็นการเปิดหน้าต่างใหม่
ตัวอย่างเช่น,
<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>
ดูเหมือนจะแทนที่การตั้งค่าเบราว์เซอร์จริง ๆ
งานนี้สำหรับฉันเพียงแค่ป้องกันไม่ให้เหตุการณ์ที่เพิ่ม URL ไปยังแล้วเรียกเหตุการณ์คลิกที่ว่า<a>
tag
tag
Js
$('.myBtn').on('click', function(event) {
event.preventDefault();
$(this).attr('href',"http://someurl.com");
$(this).trigger('click');
});
HTML
<a href="#" class="myBtn" target="_blank">Go</a>
window.open(url)
จะเปิด URL ในเบราว์เซอร์ใหม่แท็บ ด้านล่าง JS เป็นทางเลือกสำหรับมัน
let a= document.createElement('a');
a.target= '_blank';
a.href= 'https://support.wwf.org.uk/';
a.click(); // we don't need to remove 'a' from DOM because we not add it
นี่คือตัวอย่างการทำงาน( ตัวอย่างสแต็คโอเวอร์โฟลว์ไม่อนุญาตให้เปิดแท็บใหม่)
ไม่ว่าจะเปิด URL ในแท็บใหม่หรือหน้าต่างใหม่จะถูกควบคุมโดยการตั้งค่าเบราว์เซอร์ของผู้ใช้ ไม่มีวิธีการแทนที่ใน JavaScript
window.open()
ทำงานแตกต่างกันไปขึ้นอยู่กับวิธีการใช้งาน หากมันถูกเรียกว่าเป็นผลโดยตรงจากการกระทำของผู้ใช้ให้เราบอกว่าคลิกปุ่มมันควรจะทำงานได้ดีและเปิดแท็บใหม่ (หรือหน้าต่าง):
const button = document.querySelector('#openTab');
// add click event listener
button.addEventListener('click', () => {
// open a new tab
const tab = window.open('https://attacomsian.com', '_blank');
});
อย่างไรก็ตามหากคุณพยายามเปิดแท็บใหม่จากการเรียกกลับคำขอ AJAXเบราว์เซอร์จะบล็อกเนื่องจากเป็นการกระทำของผู้ใช้โดยตรง
ในการเลี่ยงผ่านตัวป้องกันป๊อปอัปและเปิดแท็บใหม่จากการโทรกลับนี่คือแฮ็คเล็กน้อย :
const button = document.querySelector('#openTab');
// add click event listener
button.addEventListener('click', () => {
// open an empty window
const tab = window.open('about:blank');
// make an API call
fetch('/api/validate')
.then(res => res.json())
.then(json => {
// TODO: do something with JSON response
// update the actual URL
tab.location = 'https://attacomsian.com';
tab.focus();
})
.catch(err => {
// close the empty window
tab.close();
});
});
ฉันลองด้วยวิธีนี้และดูเหมือนว่าจะทำงานได้ดี
window.open('example.com', 'newWin');
ฉันพบตัวอย่างการทำงานมากมายที่นี่:
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl
ฉันจะเห็นด้วยกับผู้เขียน (ถอดความที่นี่): "สำหรับลิงค์ในหน้าเว็บที่มีอยู่เบราว์เซอร์จะเปิดลิงค์ในแท็บใหม่เสมอหากหน้าใหม่เป็นส่วนหนึ่งของเว็บไซต์เดียวกันเช่น หน้าเว็บที่มีอยู่ " อย่างน้อยฉัน "กฎทั่วไป" นี้ใช้ได้กับ Chrome, Firefox, Opera, IE, Safari, SeaMonkey และ Konqueror
อย่างไรก็ตามมีวิธีที่ซับซ้อนน้อยกว่าในการใช้ประโยชน์จากสิ่งที่คนอื่นนำเสนอ สมมติว่าเรากำลังพูดถึงเว็บไซต์ของคุณเอง ("thissite.com" ด้านล่าง) ซึ่งคุณต้องการควบคุมสิ่งที่เบราว์เซอร์ทำอยู่ด้านล่างคุณต้องการให้ "specialpage.htm" ว่างเปล่าไม่มี HTML เลย ( ประหยัดเวลาในการส่งข้อมูลจากเซิร์ฟเวอร์!)
var wnd, URL; //global variables
//specifying "_blank" in window.open() is SUPPOSED to keep the new page from replacing the existing page
wnd = window.open("http://www.thissite.com/specialpage.htm", "_blank"); //get reference to just-opened page
//if the "general rule" above is true, a new tab should have been opened.
URL = "http://www.someothersite.com/desiredpage.htm"; //ultimate destination
setTimeout(gotoURL(),200); //wait 1/5 of a second; give browser time to create tab/window for empty page
function gotoURL()
{ wnd.open(URL, "_self"); //replace the blank page, in the tab, with the desired page
wnd.focus(); //when browser not set to automatically show newly-opened page, this MAY work
}
หากคุณต้องการเปิดลิงก์ภายนอก (ลิงก์ที่ไปยังไซต์อื่น ๆ ) ดังนั้น JavaScript / jQuery นี้จะทำงานได้ดี:
$(function(){
var hostname = window.location.hostname.replace('www.', '');
$('a').each(function(){
var link_host = $(this).attr('hostname').replace('www.', '');
if (link_host !== hostname) {
$(this).attr('target', '_blank');
}
});
});
เบราว์เซอร์จะเปิดลิงก์ในแท็บใหม่เสมอหากลิงก์นั้นอยู่ในโดเมนเดียวกัน (บนเว็บไซต์เดียวกัน) หากลิงก์นั้นอยู่ในโดเมนอื่นจะเปิดขึ้นในแท็บ / หน้าต่างใหม่ขึ้นอยู่กับการตั้งค่าเบราว์เซอร์
ดังนั้นตามนี้เราสามารถใช้:
<a class="my-link" href="http://www.mywebsite.com" rel="http://www.otherwebsite.com">new tab</a>
และเพิ่มรหัส jQuery:
jQuery(document).ready(function () {
jQuery(".my-link").on("click",function(){
var w = window.open('http://www.mywebsite.com','_blank');
w.focus();
w.location.href = jQuery(this).attr('rel');
return false;
});
});
ดังนั้นก่อนเปิดหน้าต่างใหม่ในเว็บไซต์เดียวกันโดยมีเป้าหมาย _blank (จะเปิดในแท็บใหม่) จากนั้นเปิดเว็บไซต์ที่คุณต้องการภายในหน้าต่างใหม่นั้น