नया टैब में Chrome, Javascript, window.open


110

क्रोम में यह एक नए टैब में खुलता है:

<button onclick="window.open('newpage.html', '_blank')" />

यह एक नई विंडो में खुलता है (लेकिन मैं चाहूंगा कि यह नए टैब में भी खुले:

<script language="javascript">
  window.open('newpage.html', '_blank');
</script>

क्या यह संभव है?


2
क्या आप निश्चित हैं कि आप क्या पुष्टि करते हैं? दोनों टुकड़ों का एक ही परिणाम है।
डेविस सेग्रुट

1
चाहे एक टैब में एक विंडो खुलती है या एक नई विंडो स्थानीय ब्राउज़र पर निर्भर होती है और उपयोगकर्ता अपने ब्राउज़र को कैसे कॉन्फ़िगर करता है - यह ऐसी चीज नहीं है जिसे आप जावास्क्रिप्ट में निर्दिष्ट कर सकते हैं।
jfriend00

जवाबों:


150

आप इसे सीधे नियंत्रित नहीं कर सकते, क्योंकि यह इंटरनेट एक्सप्लोरर उपयोगकर्ताओं द्वारा नियंत्रित एक विकल्प है।

यदि उपयोगकर्ता ऐसा करने के लिए ब्राउज़र को कॉन्फ़िगर करता है, तो एक अलग विंडो नाम के साथ Window.open का उपयोग करने वाले पृष्ठ खुलेंगे, जो पॉपअप की तरह एक नई ब्राउज़र विंडो में खुलेगा, या नए टैब में खुलेगा।

संपादित करें:

एक अधिक विस्तृत विवरण:

1. आधुनिक ब्राउज़रों में, window.open पॉपअप के बजाय एक नए टैब में खुलेगा।

2. आप 3 पैरामीटर में विकल्पों को निर्दिष्ट करके एक ब्राउज़र को एक नई विंडो ('पॉपअप') का उपयोग करने के लिए मजबूर कर सकते हैं

3. यदि window.open कॉल उपयोगकर्ता द्वारा शुरू किए गए इवेंट का हिस्सा नहीं था, तो यह एक नई विंडो में खुलेगा।

4. "उपयोगकर्ता द्वारा शुरू किया गया ईवेंट" में समान फ़ंक्शन कॉल नहीं है - लेकिन यह उपयोगकर्ता द्वारा क्लिक किए गए फ़ंक्शन में उत्पन्न होना चाहिए

5. यदि कोई उपयोगकर्ता किसी ईवेंट कॉल को शुरू करता है या डिफॉल्ट करता है (किसी इवेंट श्रोता या प्रतिनिधि को क्लिक इवेंट के लिए बाध्य नहीं करता है, या उदाहरण के लिए सेटटाइमआउट का उपयोग करके), तो यह "उपयोगकर्ता द्वारा शुरू किया गया" के रूप में स्थिति खो देता है।

6. कुछ पॉपअप ब्लॉकर्स उपयोगकर्ता द्वारा शुरू की गई घटनाओं से विंडो को खोलने की अनुमति देंगे, लेकिन अन्यथा खोले नहीं गए।

7. यदि कोई पॉपअप अवरुद्ध है, तो सामान्य रूप से अवरोधक (उपयोगकर्ता द्वारा शुरू की गई घटनाओं के माध्यम से) की अनुमति दी जाएगी। कुछ उदाहरण…

एक नए टैब के बजाय एक नए ब्राउज़र उदाहरण में विंडो खोलने के लिए मजबूर करना:

window.open('page.php', '', 'width=1000');

निम्नलिखित एक उपयोगकर्ता द्वारा शुरू की गई घटना के रूप में योग्य होगा, भले ही वह किसी अन्य फ़ंक्शन को कॉल करे:

function o(){
  window.open('page.php');
}
$('button').addEvent('click', o);

सेटटाइमआउट के ख़राब होने के बाद से निम्नलिखित उपयोगकर्ता के रूप में शुरू होने वाली घटना के रूप में योग्य नहीं होगा:

function g(){
  setTimeout(o, 1);
}
function o(){
  window.open('page.php');
}
$('button').addEvent('click', g);

2
मैं सिर्फ यह जोड़ना चाहता हूं कि Chrome और FF में परीक्षण करके मुझे पता चला है कि "उपयोगकर्ता द्वारा शुरू की गई घटना" के रूप में जो आप परिभाषित करते हैं उसमें window.open का उपयोग करके ब्राउज़र डिफ़ॉल्ट कार्रवाई करता है। इसके द्वारा मेरा मतलब है कि यदि क्रोम में आप क्रोम पर शिफ्ट करते हैं और क्लिक करते हैं तो एक नई ब्राउज़र विंडो दिखाई देगी, यदि आप ctrl (या मध्य माउस बटन दबाते हैं) तो पृष्ठभूमि में एक नया टैब खुल जाएगा। जो बहुत अच्छा है, आप एंकर टैग लगाने की आवश्यकता के बिना कुछ चीजें बना सकते हैं।
हॉफमैन

3
"अगर window.open कॉल उपयोगकर्ता द्वारा शुरू किए गए इवेंट का हिस्सा नहीं था, तो यह एक नई विंडो में खुलेगा।" नहीं, यह लगभग निश्चित रूप से बिल्कुल नहीं खोला जाएगा।
टीजे क्राउडर

3
9/29/2014 तक, नवीनतम फ़ायरफ़ॉक्स ईएसआर और आईई 11 एक नई विंडो में _blank या window.open लिंक खोलते हैं जब js कॉल _blank को विंडो नाम के रूप में उपयोग करते हैं। वर्तमान Chrome इतना आसान नहीं है। मैंने एक नई विंडो पासिंग टॉप, लेफ्ट, चौड़ाई, ऊँचाई, टूलबार, लोकेशन, डाइरेक्टरीज़, स्टेटस, मेनूबार, स्क्रोलबार्स, और रेज़िबल, और बदले में उनमें से हर एक को छोड़ते हुए परीक्षण किया। Chrome ने उन सभी को एक नए टैब में खोला, जब स्टेटस, मेनूबार, या स्क्रॉलबार को छोड़ दिया गया था। ऐसा लगता है कि यह मनमाना कठिन है, लेकिन अनुभवजन्य रूप से यही हुआ है। यहाँ उदाहरण: jsbin.com/mobiyeqojaha/1
संवर्धन

34

यदि उपयोगकर्ता पसंद करता है, तो यह टैब के उपयोग को मजबूर करने के लिए कभी-कभी उपयोगी होता है। जैसा कि प्रकाश ने ऊपर कहा है, यह कभी-कभी गैर-उपयोगकर्ता द्वारा शुरू किए गए ईवेंट के उपयोग से निर्धारित होता है, लेकिन इसके आस-पास के रास्ते भी होते हैं।

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

$("#theButton").button().click( function(event) {
   $.post( url, data )
   .always( function( response ) {
      window.open( newurl + response, '_blank' );
   } );
} );

हमेशा "newurl" को एक नई ब्राउज़र विंडो में खोलें क्योंकि "हमेशा" फ़ंक्शन को उपयोगकर्ता द्वारा आरंभित नहीं माना जाता है। हालाँकि, अगर हम ऐसा करते हैं:

$("#theButton").button().click( function(event) {
   var newtab = window.open( '', '_blank' );
   $.post( url, data )
   .always( function( response ) {
      newtab.location = newurl + response;
   } );
} );

हम नई ब्राउज़र विंडो खोलते हैं या नया टैब बनाते हैं, जैसा कि बटन में उपयोगकर्ता वरीयता द्वारा निर्धारित किया जाता है जो आईएस-उपयोगकर्ता द्वारा शुरू किया गया है। फिर हमने AJAX पोस्ट से लौटने के बाद वांछित URL पर स्थान निर्धारित किया। Voila, हम एक टैब का उपयोग करने के लिए मजबूर करते हैं यदि उपयोगकर्ता पसंद करता है।


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

यह तब तक ठीक है जब तक कि आपका window.open और फ़ंक्शन का परिणाम कुछ ऐसा नहीं होता है जिसमें 5/6/7 सेकंड या ऐसा हो। विचार करें कि क्या फ़ंक्शन एक सर्वर पर डेटा पोस्ट कर रहा है जो पीडीएफ उत्पन्न कर रहा है जो 10 सेकंड लेता है। एक खाली टैब के लिए window.open तत्काल है और उपयोगकर्ता 10 सेकंड के लिए खाली टैब पर जादुई रूप से पॉप्युलेट होने तक घूरता रहता है। अभी भी आईओएस पर यह एकमात्र समाधान के बारे में है।
केविन ब्राउन

13

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

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

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    redirectWindow.location;
});

इसके लिए काम कर रहे जेएस फिडल http://jsfiddle.net/safeeronline/70kdacL4/2/

अजाक्स खिड़की खुला http://jsfiddle.net/safeeronline/70kdacL4/5/


11

फिलहाल (Chrome 39) मैं एक नया टैब खोलने के लिए इस कोड का उपयोग करता हूं:

window.open('http://www.stackoverflow.com', '_blank', 'toolbar=yes, location=yes, status=yes, menubar=yes, scrollbars=yes');

बेशक यह क्रोम के भविष्य के संस्करणों में बदल सकता है।

यदि आप अपने उपयोगकर्ताओं द्वारा उपयोग किए जा रहे ब्राउज़र को नियंत्रित नहीं कर सकते, तो इसका उपयोग करना एक बुरा विचार है। यह भविष्य के संस्करणों में या विभिन्न सेटिंग्स के साथ काम नहीं कर सकता है।


Jfriend00 की टिप्पणी के अनुसार, उपयोगकर्ता द्वारा ब्राउज़र को कॉन्फ़िगर करने का तरीका निर्धारित करता है कि नई विंडो कैसे खोली जाती हैं, कोड नहीं।
ली टेलर

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

2
सोच रहे लोगों के लिए, इस कोड स्निपेट को चलाने से इस त्रुटि का काम नहीं होता:VM646 js:12 Blocked opening 'http://www.stackoverflow.com/' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.
बेंजामिन क्राउज़ियर

6

यह क्रोम और फ़ायरफ़ॉक्स में एक नए टैब में लिंक को खोलेगा, और संभवतः अधिक ब्राउज़रों का मैंने परीक्षण नहीं किया है:

var popup  = $window.open("about:blank", "_blank"); // the about:blank is to please Chrome, and _blank to please Firefox
popup.location = 'newpage.html';

यह मूल रूप से एक नया खाली टैब खोलता है, और फिर उस खाली टैब का स्थान निर्धारित करता है। खबरदार कि यह एक तरह का हैक है, क्योंकि ब्राउज़र टैब / विंडो व्यवहार वास्तव में ब्राउज़र और उपयोगकर्ता का डोमेन, जिम्मेदारी और पसंद है।

दूसरी पंक्ति को कॉलबैक में कहा जा सकता है (उदाहरण के लिए आपने कुछ AJAX अनुरोध करने के बाद), लेकिन तब ब्राउज़र इसे उपयोगकर्ता द्वारा शुरू की गई क्लिक-ईवेंट के रूप में मान्यता नहीं देगा, और पॉपअप को ब्लॉक कर सकता है।


1
$windowकेवल AngularJS का उपयोग करने का तरीका है window। आप windowइसके बजाय बस का उपयोग कर सकते हैं । अधिक जानकारी: docs.angularjs.org/api/ng/service/$window
Magne


0

नए टैब में खोलने के लिए आप इस कोड का उपयोग कर सकते हैं।

function openWindow( url )
{
  window.open(url, '_blank');
  window.focus();
}

मैं इसे stackoverflow से मिला है ।


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

@djsmith, मैं इसका उपयोग कर रहा हूँ .. और केवल IE7 में समस्या का सामना कर रहा हूँ। यदि आपके पास कोई अन्य उपाय है तो कृपया सुझाव दें .. धन्यवाद ..
दिलीप राजकुमार

-2

सबसे अच्छा तरीका मैं उपयोग:

1- अपने HTML में लिंक जोड़ें:

<a id="linkDynamic" target="_blank" href="#"></a>

2- JS फ़ंक्शन जोड़ें:

function OpenNewTab(href)
{
    document.getElementById('linkDynamic').href = href;
    document.getElementById('linkDynamic').click();
}

3- बस आप जिस लिंक को चाहते हैं उसके साथ OpenNewTab फ़ंक्शन को कॉल करें

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