एक नया टैब में एक URL खोलें (और एक नई विंडो नहीं)


2101

पॉपअप विंडो के विपरीत, मैं एक नए टैब में एक URL खोलने की कोशिश कर रहा हूं ।

मैंने संबंधित प्रश्न देखे हैं जहाँ प्रतिक्रियाएँ कुछ इस तरह दिखेंगी:

window.open(url,'_blank');
window.open(url);

लेकिन उनमें से किसी ने मेरे लिए काम नहीं किया, ब्राउज़र ने अभी भी एक पॉपअप विंडो खोलने की कोशिश की।


85
यह आमतौर पर वरीयता का मामला है। कुछ लोग खिड़कियां पसंद करते हैं (और इस व्यवहार की जमकर रक्षा करते हैं), कुछ टैब (और जमकर इस व्यवहार की रक्षा करते हैं)। तो आप एक ऐसे व्यवहार को हरा देंगे, जिसे आमतौर पर स्वाद का मामला माना जाता है, न कि डिजाइन का।
जेरेड फरिश

42
जावास्क्रिप्ट आपके ब्राउज़र और विंडो बनाम टैब के बारे में कुछ भी नहीं जानता है, इसलिए यह वास्तव में ब्राउज़र पर निर्भर है कि वह नई विंडो कैसे खोलें।
एंड्री

3
पॉपअप के विपरीत, मैं इसे नए टैब में प्रदर्शित करने के लिए Chrome को कैसे कॉन्फ़िगर कर सकता हूं?
मार्क

8
जीमेल किसी भी तरह कम से कम क्रोम में ऐसा करता है। Shift + एक ईमेल पंक्ति पर क्लिक करें और आप एक नई विंडो में उस ईमेल को खोलें। Ctrl + क्लिक करें और आप इसे एक नए टैब में खोलें। केवल समस्या: जीमेल के ओब्सेक्टेड कोड में खुदाई करना एक पीआईटीए है
सर्जियो

48
@Sergio, किसी भी लिंक के लिए डिफ़ॉल्ट ब्राउज़र व्यवहार है। (कम से कम क्रोम और फ़ायरफ़ॉक्स के लिए।) जीमेल से कोई लेना देना नहीं है।
Qtax

जवाबों:


928

एक लेखक कुछ भी नहीं कर सकता एक नई विंडो के बजाय एक नए टैब में खोलने का विकल्प चुन सकता है; यह एक उपयोगकर्ता प्राथमिकता है । (ध्यान दें कि अधिकांश ब्राउज़रों में डिफ़ॉल्ट उपयोगकर्ता वरीयता नए टैब के लिए है, इसलिए एक ब्राउज़र पर एक तुच्छ परीक्षण जहां उस वरीयता को नहीं बदला गया है वह इसे प्रदर्शित नहीं करेगा।)

CSS3 ने लक्ष्य-नया प्रस्तावित किया , लेकिन विनिर्देश छोड़ दिया गया था

रिवर्स सच नहीं है, तीसरे तर्क में खिड़की के आयामों को निर्दिष्ट करके window.open(), आप टैब के लिए वरीयता होने पर एक नई विंडो को ट्रिगर कर सकते हैं।


42
@ अलीहैदेरी जावास्क्रिप्ट का नया टैब / विंडो खोलने के तरीके से कोई लेना-देना नहीं है। यह सब आपके ब्राउज़र की सेटिंग से निर्धारित होता है। window.openब्राउज़र के उपयोग से ब्राउज़र को कुछ नया खोलने के लिए कहा जाता है, फिर ब्राउज़र खुलता है कि उसकी सेटिंग में क्या चुना गया है - टैब या विंडो। आपके द्वारा परीक्षण किए गए ब्राउज़रों में, टैब के बजाय एक नई विंडो में खोलने के लिए सेटिंग्स बदलें और आप देखेंगे कि दूसरों के समाधान गलत हैं।
इयान

239
दो चीजें जो दूसरे लोगों के समय को बर्बाद करती हैं, उन्हें यह बताने से ज्यादा कुछ नहीं किया जा सकता है। (1) उन्हें कुछ है कि नहीं किया जा सकता बोलने कर सकते हैं किया जा। (२) चुप रहना और उन्हें कुछ ऐसा करने का तरीका ढूंढते रहना, जो किया न जा सके।
क्वेंटिन

8
@Cupcake - प्रलेखन आमतौर पर उन विशेषताओं का वर्णन करने के लिए परेशान नहीं करता है जो मौजूद नहीं हैं। evernote.com/shard/s3/sh/428d2d68-39f9-491d-8352-8a9c217b67d7/…
क्वेंटिन

9
@ नील - क्योंकि यह एक विषय पर बात करने के लिए बहुत से लोगों के बारे में जानना चाहते हैं।
क्वेंटिन

4
लेखक चीजें कर सकते हैं (ज्यादातर अलग कोड लिख रहे हैं)। उन चीजों में से कोई भी खिड़की के बजाय एक टैब को ट्रिगर नहीं करेगा।
क्वेंटिन

1733

यह एक चाल है,

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/


117
काम नहीं करता। पता बार के दाईं ओर एक संदेश मिला: पॉपअप अवरुद्ध । फिर मैंने पॉपअप की अनुमति दी। और voilà, यह एक पॉपअप में खुलता है, टैब नहीं ! OS X Lion पर क्रोम 22.0.1229.94।
नालपुरी

39
@ b1naryatr0phy ऐसा इसलिए है क्योंकि आपने वास्तव में इसका ठीक से परीक्षण नहीं किया है। अपने ब्राउज़र में सेटिंग्स बदलें। चाहे वह किसी टैब या विंडो में खोला गया हो, आपके ब्राउज़र की सेटिंग से निर्धारित होता है। नई विंडो / टैब खोलने के तरीके को चुनने के लिए window.open (या कोई जावास्क्रिप्ट) कॉल करके आप कुछ भी नहीं कर सकते हैं।
इयान

प्रश्न: मैं बिना प्रोटोकॉल के url सेट करता हूं (उदाहरण के लिए my.site.com/Controller/Index)। परिणामस्वरूप मुझे url द्वारा नई विंडो (टैब) मिलती है जैसे कि वर्तमान पृष्ठ का url (जहां से मैं फ़ंक्शन OpenInNewTab का उपयोग करता हूं) प्लस फ़ंक्शन url में पारित हो गया है। प्रोटोकॉल विंडो सही लिंक द्वारा खुलती है। क्यों?
user2167382

2
var जीत = window.open (url, '_blank'); '_blank' आवश्यक नहीं है, window.open () के लिए , दूसरा पैरामीटर strWindowName है, इसके लिए: नई विंडो के लिए एक स्ट्रिंग नाम। नाम का उपयोग लिंक और रूपों के लक्ष्य के रूप में किया जा सकता है <a <a> या <form> तत्व की लक्ष्य विशेषता का उपयोग करते हुए। नाम में कोई व्हाट्सएप अक्षर नहीं होना चाहिए। ध्यान दें कि strWindowName नई विंडो का शीर्षक निर्दिष्ट नहीं करता है।
हाइड्रेंजर

क्या बिना सैंडबॉक्स वाले आईफ्रेम के इस नए टैब को खोलने का कोई तरीका है? जब मैं इसका उपयोग करता हूं तो मुझे CORS त्रुटियां मिलती हैं क्योंकि डॉक्यूमेंट.डोमेन वैल्यू नहीं बदली जाती है क्योंकि इसे आइफ्रेम के रूप में खोला जाता है।
Ids van der Zee

380

window.open()यदि यह वास्तविक क्लिक ईवेंट पर नहीं हो रहा है तो एक नए टैब में नहीं खुलेगा। उदाहरण में दिए गए URL को वास्तविक क्लिक ईवेंट पर खोला जा रहा है। यह काम करेगा बशर्ते उपयोगकर्ता के पास ब्राउज़र में उपयुक्त सेटिंग्स हों

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

इसी तरह, यदि आप क्लिक फ़ंक्शन के भीतर एक अजाक्स कॉल करने की कोशिश कर रहे हैं और सफलता पर एक खिड़की खोलना चाहते हैं, तो सुनिश्चित करें कि आप async : falseविकल्प सेट के साथ अजाक्स कॉल कर रहे हैं ।


28
यह एक सही जवाब के रूप में चिह्नित करना अच्छा होगा। Chrome v26 (Windows) के साथ मेरे परीक्षण इस बात की पुष्टि करते हैं कि यदि कोड एक बटन के क्लिक हैंडलर के भीतर है तो यह एक नया टैब खोलता है और यदि कोड को प्रोग्रामेटिक रूप से, जैसे कंसोल से मंगवाया जाता है, तो यह एक नई विंडो खोलता है।
साइबरफॉनिक

2
@ मैं डिफ़ॉल्ट सेटिंग्स के साथ ब्राउज़रों पर मेरे परीक्षण से, यह उत्तर उन मामलों में काम करता है जहां ऊपर दिए गए उत्तर नहीं हैं। स्वीकृत उत्तर जो कहता है कि "ऐसा कुछ भी नहीं है जो आप कर सकते हैं" केवल तभी सही है जब उपयोगकर्ता ने डिफ़ॉल्ट सेटिंग्स बदल दी हों।
गारफील्ड

@ इयान स्पष्टता के लिए, मैंने उपयोगकर्ता सेटिंग्स के बारे में उत्तर चेतावनी में इसका उल्लेख किया है। "यह काम करेगा बशर्ते उपयोगकर्ता के पास ब्राउज़र में उपयुक्त सेटिंग्स हों।" मुझे लगता है कि अधिकांश उपयोगकर्ता ब्राउज़र सेटिंग्स नहीं बदलते हैं और यह उत्तर उनमें से अधिकांश के लिए काम करता है।
वेंकट कोटरा

async: falseक्रोम में काम नहीं करता है। कॉलबैक से एक नई विंडो खोलने के लिए, आपको पहले HTTP अनुरोध भेजने से पहले एक खाली विंडो खोलने की आवश्यकता है और बाद में इसे अपडेट करें। यहाँ एक अच्छा हैक है
अटाकोमियन

250

window.open सभी ब्राउज़रों में एक नया टैब में विश्वसनीय रूप से पॉपअप नहीं खोल सकते

विभिन्न ब्राउज़र window.open अलग-अलग तरीकों से व्यवहार को लागू करते हैं, विशेष रूप से उपयोगकर्ता की ब्राउज़र वरीयताओं के संबंध में। आप window.openइंटरनेट एक्सप्लोरर, फ़ायरफ़ॉक्स, और क्रोम के सभी के लिए समान व्यवहार की उम्मीद नहीं कर सकते हैं , क्योंकि विभिन्न तरीकों से वे उपयोगकर्ता की ब्राउज़र वरीयताओं को संभालते हैं।

उदाहरण के लिए, इंटरनेट एक्सप्लोरर (11) उपयोगकर्ता एक नई विंडो या नए टैब में पॉपअप खोलने का विकल्प चुन सकते हैं, आप इंटरनेट एक्सप्लोरर 11 उपयोगकर्ताओं को क्वेंटिन के उत्तरwindow.open में बताए गए तरीके से पॉपअप खोलने के लिए बाध्य नहीं कर सकते

फ़ायरफ़ॉक्स (29) उपयोगकर्ताओं के लिए, का उपयोग window.open(url, '_blank') करना उनके ब्राउज़र की टैब वरीयताओं पर निर्भर करता है, हालांकि आप अभी भी उन्हें एक चौड़ाई और ऊंचाई निर्दिष्ट करके पॉपअप खोलने के लिए मजबूर कर सकते हैं (नीचे "क्रोम के बारे में?" अनुभाग देखें)।

प्रदर्शन

अपने ब्राउज़र की सेटिंग में जाएं और पॉपअप को एक नई विंडो में खोलने के लिए इसे कॉन्फ़िगर करें।

इंटरनेट एक्सप्लोरर (11)

Internet Explorer सेटिंग्स संवाद 1

इंटरनेट एक्सप्लोरर टैब सेटिंग्स संवाद

टेस्ट पेज

ऊपर बताए अनुसार एक नई विंडो में पॉपअप खोलने के लिए इंटरनेट एक्सप्लोरर (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>

ध्यान रखें कि पॉपअप एक नई विंडो में खोला जाता है, न कि एक नया टैब।

आप फ़ायरफ़ॉक्स (29) में ऊपर की ओर उन स्निपेट्स का परीक्षण भी कर सकते हैं, जिनकी टैब वरीयताएँ नई विंडो पर सेट हैं, और वही परिणाम देखें।

क्रोम के बारे में क्या? यह window.openइंटरनेट एक्सप्लोरर (11) और फ़ायरफ़ॉक्स (29) से अलग-अलग लागू होता है ।

मुझे 100% यकीन नहीं है, लेकिन ऐसा लग रहा है कि क्रोम (संस्करण 34.0.1847.131 m) में ऐसी कोई सेटिंग नहीं है जिसे उपयोगकर्ता किसी नई विंडो या नए टैब (जैसे फ़ायरफ़ॉक्स और इंटरनेट एक्सप्लोरर) में पॉपअप खोलने के लिए चुन सकता है या नहीं ) है। मैंने पॉप-अप के प्रबंधन के लिए Chrome दस्तावेज़ की जाँच की , लेकिन इसमें उस चीज़ के बारे में कुछ भी उल्लेख नहीं किया गया था।

इसके अलावा, एक बार फिर, विभिन्न ब्राउज़र अलग-अलग व्यवहार को लागू करते हैं window.open क्रोम और फ़ायरफ़ॉक्स में, एक चौड़ाई और ऊँचाई निर्दिष्ट करने से एक पॉपअप मजबूर हो जाएगा, तब भी जब उपयोगकर्ता ने फ़ायरफ़ॉक्स (29) को एक नए टैब में नई विंडो खोलने के लिए सेट किया है (जैसा कि जावास्क्रिप्ट के उत्तर में एक नई विंडो में खुला है, टैब नहीं ) :

<!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>

हालांकि, उपरोक्त कोड स्निपेट हमेशा इंटरनेट एक्सप्लोरर 11 में एक नया टैब खोलेगा, यदि उपयोगकर्ता टैब को अपनी ब्राउज़र प्राथमिकता के रूप में सेट करते हैं, तो चौड़ाई और ऊंचाई निर्दिष्ट नहीं करना भी उनके लिए एक नई विंडो पॉपअप को मजबूर करेगा।

तो window.openक्रोम का व्यवहार एक onclickघटना में उपयोग किए जाने पर नए टैब में पॉपअप खोलने के लिए , ब्राउज़र कंसोल से उपयोग किए जाने पर नई विंडो में खोलने के लिए ( जैसा कि अन्य लोगों द्वारा नोट किया गया है ) और उन्हें नई विंडो में खोलने के लिए प्रतीत होता है चौड़ाई और ऊंचाई के साथ निर्दिष्ट।

सारांश

अलग-अलग ब्राउज़र window.open उपयोगकर्ताओं की ब्राउज़र वरीयताओं के संबंध में अलग-अलग व्यवहार को लागू करते हैं। आप window.openइंटरनेट एक्सप्लोरर, फ़ायरफ़ॉक्स, और क्रोम के सभी के लिए समान व्यवहार की उम्मीद नहीं कर सकते हैं , क्योंकि विभिन्न तरीकों से वे उपयोगकर्ता की ब्राउज़र वरीयताओं को संभालते हैं।

अतिरिक्त पढ़ना


12
आपने सवाल का जवाब नहीं दिया, आपने बस साबित कर दिया कि window.open असंगत है।
बेंटऑन कोडिंग

223

एक लाइन:

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(साथ ही इस पृष्ठ पर किसी अन्य समाधान) को उपयोगकर्ता कार्रवाई कॉलबैक के दौरान कॉल किया जाना चाहिए - जैसे। अंदर क्लिक घटना (सीधे कॉलबैक फ़ंक्शन में आवश्यक नहीं है, लेकिन क्लिक कार्रवाई के दौरान)।

यदि आप इसे कुछ रैंडम मोमेंट (उदाहरण के अंदर या सर्वर के जवाब के बाद) में मैन्युअल रूप से कॉल करेंगे - तो इसे ब्राउज़र द्वारा ब्लॉक किया जा सकता है (जो समझ में आता है क्योंकि यह सुरक्षा जोखिम होगा और उपयोगकर्ता के खराब अनुभव का कारण बन सकता है )


8
धन्यवाद। आपके शुद्ध-जेएस के पास एक लापता टुकड़ा है - जैसा कि ल्यूक एल्डर्टन ने लिखा है (नीचे देखें), आपको दस्तावेज़ निकाय में बनाए गए तत्व को संलग्न करने की आवश्यकता है, आपके कोड में यह शून्य में लटका हुआ है कम से कम फ़ायरफ़ॉक्स 37 में यह कुछ भी नहीं करता है ।
ग्रीनल्डमैन

4
@mcginniwa इस तरह की कोई भी कार्रवाई - यदि माउस क्लिक जैसी उपयोगकर्ता कार्रवाई से ट्रिगर नहीं होता है तो पॉपअप-अवरोधक बन जाएगा। कल्पना कीजिए कि आप उपयोगकर्ता कार्रवाई के बिना जावास्क्रिप्ट के साथ किसी भी यूआरएल को खोल सकते हैं - यह काफी खतरनाक होगा। यदि आप इस फ़ंक्शन को क्लिक फ़ंक्शन जैसे ईवेंट के अंदर रखते हैं - तो यह ठीक काम करेगा - यह यहाँ सभी प्रस्तावित समाधानों के साथ समान है।
पाई 6k

4
आप अपने कोड को इस प्रकार सरल कर सकते हैं: $('<a />',{'href': url, 'target', '_blank'}).get(0).click();
श्डरिक

5
@ स्क्रिप्च आपके स्निप्ड से प्रेरित होकर मैंने नॉन- Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
जेकरी

यह एफएफ में काम नहीं करता है!
नवलेश

91

यदि आप उपयोग करते हैं window.open(url, '_blank'), तो यह क्रोम पर अवरुद्ध (पॉपअप अवरोधक) होगा।

इसे इस्तेमाल करे:

//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;
};

लेकिन इस प्रश्न में, वे साइट लेखक के बारे में उल्लेख नहीं करते हैं। केवल नई विंडो या नए टैब में एक url खोलना चाहते हैं। यह ब्राउज़र पर निर्भर है। हमें लेखक के बारे में परेशान होने की जरूरत नहीं है। कृपया उस बेला की जाँच करें। यह काम कर रहा है
मोहम्मद सेफ़र

यह पाया जाता है कि, यह js फिडेल और प्लंकर पर काम नहीं करता था, लेकिन जब आप html फाइल बनाते हैं तो यह काम करता है। ऐसा इसलिए है क्योंकि js फ़िडल, आउटपुट iframe पर प्रदर्शित होता है, इसलिए नई विंडो अवरुद्ध हो जाती है क्योंकिthe request was made in a sandboxed frame whose 'allow-popups' permission is not set
मोहम्मद सेफ़र

67

स्टीवन स्पीलबर्ग के जवाब को विस्तृत करने के लिए, मैंने इस तरह के मामले में ऐसा किया:

$('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();

57

मैं निम्नलिखित का उपयोग करता हूं और यह बहुत अच्छी तरह से काम करता है!

window.open(url, '_blank').focus();

2
यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब या विंडो में खुल सकता है। प्रश्न विशेष रूप से एक नए टैब में खोलने के बारे में है, भले ही वरीयताएँ एक नई विंडो के लिए हों।
क्वेंटिन

19

मुझे लगता है कि आप इसे नियंत्रित नहीं कर सकते। यदि उपयोगकर्ता ने अपने ब्राउज़र को नई विंडो में लिंक खोलने के लिए सेटअप किया था, तो आप इसे नए टैब में लिंक खोलने के लिए बाध्य नहीं कर सकते।

जावास्क्रिप्ट एक नई विंडो में खुली, टैब नहीं


19

एक दिलचस्प तथ्य यह है कि नया टैब नहीं खोला जा सकता है यदि उपयोगकर्ता द्वारा कार्रवाई नहीं की जाती है (एक बटन या कुछ और क्लिक करके) या यदि यह अतुल्यकालिक है, उदाहरण के लिए, यह नए टैब में नहीं खुलेगा:

$.ajax({
    url: "url",
    type: "POST",
    success: function() {
        window.open('url', '_blank');              
    }
});

लेकिन यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब में खुल सकता है:

$.ajax({
    url: "url",
    type: "POST",
    async: false,
    success: function() {
        window.open('url', '_blank');              
    }
});

2
यह फ़ायरफ़ॉक्स 28, क्रोम 34 बी और सफारी 7.0.2 में पॉपअप के रूप में अवरुद्ध हो रहा है, सभी स्टॉक सेटिंग्स। :(
स्टीव मीस्नर

1
"नया टैब खोला नहीं जा सकता है यदि उपयोगकर्ता द्वारा कार्रवाई नहीं की जाती है (एक बटन या कुछ और क्लिक करके) या यदि यह अतुल्यकालिक है" - क्रोम का सच, लेकिन सभी ब्राउज़रों का सच नहीं। फ़ाइल <script>open('http://google.com')</script>को सहेजें .htmlऔर फ़ायरफ़ॉक्स के हाल के संस्करण की एक ताज़ा स्थापना में खोलें; आप देखेंगे कि फ़ायरफ़ॉक्स ख़ुशी से एक नए टैब में Google को खोलता है (शायद आप पॉपअप की अनुमति देने के लिए कहने के बाद), एक नई विंडो नहीं।
मार्क अमेरी

13

बस छोड़ने [strWindowFeatures] पैरामीटर एक नया टैब खोलेंगे, ब्राउज़र सेटिंग ओवरराइड (ब्राउज़र सेटिंग ट्रम्प जावास्क्रिप्ट) खोल देगा।

नयी खिड़की

var myWin = window.open(strUrl, strWindowName, [strWindowFeatures]);

नया टैब

var myWin = window.open(strUrl, strWindowName);

- या -

var myWin = window.open(strUrl);

11
(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')))

11

आप के साथ एक चाल का उपयोग कर सकते हैं 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();
}

jsFiddle डेमो


4
यदि आप इस विधि से जाते हैं, तो सुनिश्चित करें कि url में क्वेरी परम नहीं हैं क्योंकि वे फ़ॉर्म सबमिट करके छोड़ दिए जाएंगे। एक समाधान फॉर्म तत्व के अंदर छिपे इनपुट तत्वों को एम्बेड करना है जो क्वेरी पैराम के अंदर सभी मापदंडों के लिए nameकुंजी के valueरूप में और मूल्य के रूप में है। और फिर फॉर्म सबमिट करें
मुदस्सिर अली

यह aएक फ़ॉर्म के बजाय एक टैग के साथ और अधिक किया जा सकता है , और .click()इसे "सबमिट" करने के लिए jQuery विधि का उपयोग कर सकता है। मेरे जवाब की

10

यदि आप एक कस्टम फ़ंक्शन से एक नया टैब खोलने का प्रयास कर रहे हैं तो इसका ब्राउज़र सेटिंग्स से कोई लेना-देना नहीं है

इस पृष्ठ में, एक जावास्क्रिप्ट कंसोल खोलें और टाइप करें:

document.getElementById("nav-questions").setAttribute("target", "_blank");
document.getElementById("nav-questions").click();

और यह आपकी सेटिंग्स की परवाह किए बिना एक पॉपअप खोलने की कोशिश करेगा, क्योंकि 'क्लिक' एक कस्टम एक्शन से आता है।

एक लिंक पर एक वास्तविक 'माउस क्लिक' की तरह व्यवहार करने के लिए, आपको @ स्पाइरिनवल्दिमीर की सलाह का पालन ​​करना होगा और वास्तव में इसे बनाना होगा:

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>

1
मैंने एक अलग समाधान पर जाना समाप्त कर दिया, जहाँ मैं theandystratton.com/2012/… केw = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...) अनुसार करता हूँ
पॉल

11
@FahadAbidJanjua यह बिल्कुल सही नहीं है। यह अभी भी ब्राउज़र सेटिंग्स पर निर्भर करता है। HTML या जावास्क्रिप्ट विनिर्देशों में ऐसा कुछ भी नहीं है जो यह घोषित करता है कि एक टैब के बजाय "कस्टम कार्रवाई" को पॉपअप में खोलना होगा। वास्तव में, मेरे वर्तमान मशीन पर कोई भी ब्राउज़र इस व्यवहार को प्रदर्शित नहीं करता है।
nmclean

7
function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}

1
यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब या विंडो में खुल सकता है। प्रश्न विशेष रूप से एक नए टैब में खोलने के बारे में है, भले ही वरीयताएँ एक नई विंडो के लिए हों।
क्वेंटिन

3

JQuery

$('<a />',{'href': url, 'target': '_blank'}).get(0).click();

जे एस

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब या विंडो में खुल सकता है। प्रश्न विशेष रूप से एक नए टैब में खोलने के बारे में है, भले ही वरीयताएँ एक नई विंडो के लिए हों।
क्वेंटिन

2

या आप बस एक लिंक तत्व बना सकते हैं और इसे क्लिक कर सकते हैं ...

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);

यह किसी भी पॉपअप ब्लॉकर्स द्वारा अवरुद्ध नहीं होना चाहिए ... उम्मीद है।


2

इस सवाल का जवाब है और यह नहीं है।

मुझे एक आसान काम मिला:

चरण 1: एक अदृश्य लिंक बनाएं:

<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>

चरण 2: प्रोग्राम पर उस लिंक पर क्लिक करें:

document.getElementById("yourId").click();

हेयर यू गो! मेरे लिए आकर्षण का काम करता है।


यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब या विंडो में खुल सकता है। प्रश्न विशेष रूप से एक नए टैब में खोलने के बारे में है, भले ही वरीयताएँ एक नई विंडो के लिए हों।
क्वेंटिन

1

यहां छवि विवरण दर्ज करें

मैंने नए टैब को खोलने और उसी टैब पर बने रहने के बारे में बहुत सारी जानकारी पर शोध किया। मुझे इसे करने के लिए एक छोटी सी चाल मिली है। मान लें कि आपके पास 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;

प्रश्न एक नया टैब खोलने के बारे में है जब उपयोगकर्ता की प्राथमिकता उन्हें नई विंडो में खोलना है। यह नहीं पूछ रहा है कि एक ही समय में मौजूदा टैब में एक और URL खोलने पर एक नए टैब में URL कैसे खोला जाए।
क्वेंटिन

0

कैसे एक बनाने के बारे में <a>के साथ _blankके रूप में targetविशेषता मान और urlके रूप में href, शैली प्रदर्शन के साथ: आ बच्चों तत्व के साथ छिपा हुआ? फिर DOM में जोड़ें और फिर चिल्ड्रन एलिमेंट पर क्लिक इवेंट को ट्रिगर करें।

अपडेट करें

यह काम नहीं करता है। ब्राउज़र डिफ़ॉल्ट व्यवहार को रोकता है। इसे प्रोग्रामेटिक रूप से ट्रिगर किया जा सकता है, लेकिन यह डिफ़ॉल्ट व्यवहार का पालन नहीं करता है।

अपने लिए देखें और देखें: http://jsfiddle.net/4S4ET/


-1

फ़ायरफ़ॉक्स (मोज़िला) एक्सटेंशन के भीतर से एक नया टैब खोलना इस प्रकार है:

gBrowser.selectedTab = gBrowser.addTab("http://example.com");

-1

यह तरीका उपरोक्त समाधान के समान है लेकिन इसे अलग तरीके से लागू किया गया है

.social_icon -> सीएसएस के साथ कुछ वर्ग

 <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();
   });

-1

यह एक हैक हो सकता है, लेकिन फ़ायरफ़ॉक्स में यदि आप एक तीसरा पैरामीटर निर्दिष्ट करते हैं, तो 'फुलस्क्रीन = हाँ', यह एक नई विंडो खोलता है।

उदाहरण के लिए,

<a href="#" onclick="window.open('MyPDF.pdf', '_blank', 'fullscreen=yes'); return false;">MyPDF</a>

यह वास्तव में ब्राउज़र सेटिंग्स को ओवरराइड करने लगता है।


-1

मेरे लिए यह काम, बस घटना को रोकने के लिए, <a> tagउस पर क्लिक घटना को ट्रिगर करने के लिए फिर url जोड़ें 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>

यह ब्राउज़र सेटिंग्स के आधार पर एक नए टैब या विंडो में खुल सकता है। प्रश्न विशेष रूप से एक नए टैब में खोलने के बारे में है, भले ही वरीयताएँ एक नई विंडो के लिए हों।
क्वेंटिन

-1

window.open(url)नए ब्राउज़र टैब में यूआरएल खुलेगा। इसके नीचे जेएस विकल्प

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

यहाँ उदाहरण काम कर रहा है (स्टैकओवरफ़्लो स्निपेट्स नए टैब खोलने की अनुमति नहीं देता है)


"Window.open (url) नए ब्राउज़र टैब में url खोलेगा" - यह नई विंडो या नए टैब के लिए उपयोगकर्ता की प्राथमिकता का पालन करेगा। जब कोई विंडो के लिए वरीयता होती है तो यह एक नया टैब बाध्य नहीं करेगा। (जो प्रश्न के बारे में है)। यही बात लक्ष्य = _blank पर लागू होती है।
क्वेंटिन

आपके द्वारा सुझाए गए दोनों दृष्टिकोण इस प्रश्न पर पिछले 56 अनिर्धारित उत्तरों में कई बार उल्लिखित (और आलोचना) किए गए हैं।
क्वेंटिन

-1

चाहे एक नया टैब या एक नई विंडो में URL खोलना है, वास्तव में उपयोगकर्ता की ब्राउज़र प्राथमिकताओं द्वारा नियंत्रित किया जाता है। जावास्क्रिप्ट में इसे ओवरराइड करने का कोई तरीका नहीं है।

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();
        });
});

-1

मैंने इस तरह की कोशिश की और यह ठीक काम करने लगता है

window.open('example.com', 'newWin');

मुझे यहां बहुत काम के उदाहरण मिले हैं:

http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl


यह उपयोगकर्ता की पसंद के अनुसार एक नया टैब या विंडो में खुलेगा। यह एक नया टैब बाध्य नहीं करेगा जो कि प्रश्न के बारे में है।
क्वेंटिन

जब ओपी ने पहले ही कोशिश की थी तो क्या आप इस सवाल से थोड़ा चूक गए थे? या stackoverflow.com/a/59565074/19068 ? या stackoverflow.com/a/35939565/19068 ? या stackoverflow.com/a/30512485/19068 ? या stackoverflow.com/a/11384018/19068 ? या stackoverflow.com/a/26990478/19068 ?
क्वेंटिन

@ क्वेंटिन मुझे वह हिस्सा याद नहीं आया, लेकिन जब मैंने window.open को दूसरे पैरामीटर «windowName» के साथ «_blank» के बराबर या इसके बिल्कुल बिना कॉल करने की कोशिश की, तो पॉपअप या नया टैब नवीनतम Google Chrome में दिखाई नहीं दिया। जब मैंने विंडो का नाम «newWin» में बदल दिया, तो एक नया टैब खुल गया था। यह अजीब है क्योंकि विंडो नाम पैरामीटर वैकल्पिक है।
आर्टेम शेवत्सोव

-4

मैं उस व्यक्ति से कुछ हद तक सहमत हूँ जिसने लिखा है (यहाँ विरोधाभास): "मौजूदा वेब पेज में एक लिंक के लिए, ब्राउज़र हमेशा एक नए टैब में लिंक खोलेगा यदि नया पेज उसी वेब साइट का हिस्सा है मौजूदा वेब पेज। " मेरे लिए, कम से कम, यह "सामान्य नियम" क्रोम, फ़ायरफ़ॉक्स, ओपेरा, IE, सफारी, सीमॉन्की, और कोनेकर में काम करता है।

वैसे भी, दूसरे व्यक्ति ने जो प्रस्तुत किया है, उसका लाभ उठाने के लिए कम जटिल तरीका है। मान लें कि हम आपकी अपनी वेब साइट ("thissite.com" के बारे में नीचे बात कर रहे हैं), जहाँ आप यह नियंत्रित करना चाहते हैं कि ब्राउज़र क्या करता है, तो, नीचे, आप चाहते हैं कि "specialpage.htm" EMPTY हो, इसमें कोई 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
 }

-7

यदि आप केवल बाहरी लिंक (अन्य साइटों पर जाने वाले लिंक) को खोलना चाहते हैं, तो यह जावास्क्रिप्ट / 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');
        }
    });
});

यह प्रतिक्रिया इस प्रश्न के लिए उपयुक्त नहीं है। लेकिन, यह बहुत उपयोगी विचार है! आपके विचार के लिए धन्यवाद!
नूरी अक्मन

-9

यदि लिंक एक ही डोमेन (एक ही वेबसाइट पर) पर है तो ब्राउज़र हमेशा एक नए टैब में लिंक को खोलेगा। यदि लिंक किसी अन्य डोमेन पर है तो यह ब्राउज़र सेटिंग्स के आधार पर इसे एक नए टैब / विंडो में खोलेगा।

तो, इस के अनुसार, हम उपयोग कर सकते हैं:

<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 लक्ष्य के साथ नई विंडो खोलें (यह इसे नए टैब में खोलेगा), और फिर उस नई विंडो के अंदर अपनी वांछित वेबसाइट खोलें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.