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


364

मेरे पास एक चयन बॉक्स है जो window.open(url)किसी आइटम के चयन के समय कॉल करता है। फ़ायरफ़ॉक्स पेज को डिफ़ॉल्ट रूप से एक नए टैब में खोलेगा। हालाँकि, मैं चाहूंगा कि पृष्ठ एक नई विंडो में खुले, न कि एक नया टैब।

मैं यह कैसे हासिल कर सकता हूं?


3
उदाहरण देखें " jsfiddle.net/HLbLu
माइकल फ्रीजिम


जवाबों:


456

खिड़की को चौड़ाई / ऊंचाई के साथ एक 'चश्मा' पैरामीटर दें। सभी संभावित विकल्पों के लिए यहां देखें ।

window.open(url, windowName, "height=200,width=200");

जब आप एक चौड़ाई / ऊँचाई निर्दिष्ट करते हैं, तो यह एक टैब के बजाय एक नई विंडो में खुल जाएगा।


5
अच्छा सुझाव। मुझे लगता है कि ओपेरा अभी भी एक टैब में इसे खोलेगा :)।
केविन टिघे

7
IE6, FF 3.6, Chrome 9.0
जेम्स वेस्टगेट

3
एफएफ 11.0 में किसी भी अधिक काम नहीं करता है, मेरा सवाल देखें ! @ जेम्स
टीएमएस

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

3
यह वह तथ्य नहीं है जो आपने "ऊंचाई = 200, चौड़ाई = 200" रखा है जो एक नई विंडो में खुलने का प्रदर्शन करते हैं। यह बस अतिरिक्त पैरामीटर (स्थान, स्थिति आदि ....) डालने के लिए तथ्य है
पीटर

110

आपको ऊंचाई का उपयोग करने की आवश्यकता नहीं है, बस सुनिश्चित करें कि आप उपयोग करते हैं _blank, इसके बिना, यह एक नए टैब में खुलता है।

एक खाली खिड़की के लिए:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

एक विशिष्ट URL के लिए:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');

3
लेकिन क्या होगा अगर मैं इसे एक नाम देना चाहता हूं?
अदिति

कम से कम क्रोम में, location=0आवश्यक है जब जेएस को एक बटन या एंकर तत्व से लागू किया जाता है।
ओहद श्नाइडर

पूरी तरह से काम किया। स्थान = 0 के साथ-साथ फ़ायरफ़ॉक्स में भी शामिल करना था।
रिक जेम्स

@nwbrad क्या आप '_blank' भाग के बारे में निश्चित हैं क्योंकि जहां तक ​​मुझे पता है कि '_blank' डिफ़ॉल्ट मान है जब हम कोई अन्य मान निर्दिष्ट नहीं करते हैं। आपके मामले में, नए टैब के बजाय एक नई विंडो खोलने के लिए window.open फ़ंक्शन को 3 डी पैरामीटर प्रदान करने के साथ कुछ करना होगा। आपके मामले में यह 'टूलबार = 0, स्थान = 0, मेनूबार = 0' है। आप इस तीसरे पैरामीटर को छोड़ कर और दूसरे पैरामीटर के रूप में '_blank' छोड़ कर इसे सत्यापित कर सकते हैं।
user1451111

फ़ायरफ़ॉक्स 76 और इंटरनेट एक्सप्लोरर 11 जैसे आधुनिक ब्राउज़रों में पूरी तरह से काम करता है। टिप location=0मापदंडों में जोड़ रहा है। मैं _blankलक्ष्य का उपयोग करने के बजाय विंडो का नामकरण करने का भी सुझाव दूंगा , ताकि उपयोगकर्ता द्वारा पॉपअप खोलने वाले तत्व को कई बार क्लिक करने पर उसी विंडो का फिर से उपयोग किया जाए और साथ focus()ही साथ पहले से ही खुले पॉपअप पर ध्यान केंद्रित हो जाए:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
Ouzo.ower

82

मैं गलत हो सकता हूं, लेकिन जो मैं समझता हूं, यह उपयोगकर्ता की ब्राउज़र वरीयताओं द्वारा नियंत्रित है, और मुझे विश्वास नहीं है कि यह ओवरराइड हो सकता है।


1
आप ठीक कह रहे हैं, उपयोगकर्ता सेट कर सकते हैं "about: config" वरीयता सच करने के लिए "browser.tabs.opentabfor.windowopen", लेकिन यह एक वैश्विक सेटिंग है और मैं हमारे उपयोगकर्ताओं ब्राउज़रों के वैश्विक व्यवहार बदलने के लिए नहीं करना चाहते हैं;)
adam

45
मैंने आपको बताया कि मेरे पास कोड है जो काम करता है। मैंने इसे फायरबग कंसोल में टाइप किया: window.open ("", "poop", "height = 200, width = 200, modal = yes, alwaysRaised = yes"); और अंदाज लगाइये क्या??? यह काम करता हैं!!!!!!

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

2
और स्पष्ट होने के लिए, मेरा मतलब यह नहीं है कि यह एक जावास्क्रिप्ट हैक है। विंडो की ऊँचाई और चौड़ाई जोड़ना स्पष्ट रूप से js window.open मेथड ( w3schools.com/HTMLDOM/met_win_open.asp ) की विशेषताएँ हैं, मेरा मतलब है कि फ़ायरफ़ॉक्स के अभिप्रेरित व्यवहार में हेरफेर करने के अर्थ में हैक।
adam

2
मैं वास्तव में इसे एक हैक नहीं कहूंगा, प्रति से। आप सिर्फ इस बात पर समझौता कर रहे हैं कि आप वास्तव में क्या व्यवहार करना चाहते हैं, और इसके बजाय उसे लागू करना है।
माचिस

15

प्रयत्न:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

मेरे पास कुछ कोड हैं जो आपका कहना है, लेकिन इसमें बहुत सारे पैरामीटर हैं। मुझे लगता है कि ये नंगे न्यूनतम हैं, मुझे बताएं कि क्या यह काम नहीं करता है, मैं बाकी पोस्ट करूंगा।


यह केवल "मोडल = हाँ" विकल्प का उपयोग करके एफएफ 31 और क्रोम 36 में काम करता है। सभी विकल्प निर्दिष्ट कार्य भी करते हैं। मेरे पास "एफएफ प्राथमिकताओं में जाँच की गई" के बजाय "नए टैब में नई खिड़कियां खोलें" है। खुले विकल्पों के बिना, खिड़कियां नए टैब में खुलती हैं।
क्लिंट पच्ल

कुछ और परीक्षण के बाद, यह लगभग किसी भी पैरामीटर almost लगता है जब तक कि कम से कम एक open एक टैब के बजाय एक नई विंडो खोलेगा। उदाहरण के लिए सिर्फ "टॉप = 0" यहां तक ​​कि एफएफ 31 और क्रोम 36 में भी काम करता है। यह cwm विंडो मैनेजर का उपयोग करके ओपनबीएसडी पर है। इसलिए परिणाम भिन्न हो सकते हैं।
क्लिंट पच्ल

क्या मुझे पता है, [खिड़की का नाम] क्या है?
पीसी

10

ठीक है, बहुत परीक्षण करने के बाद, यहाँ मेरा निष्कर्ष है:

जब आप प्रदर्शन करते हैं:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

या जो भी आप गंतव्य क्षेत्र में डालते हैं, यह कुछ भी नहीं बदलेगा: नया पृष्ठ एक नए टैब में खोला जाएगा (इसलिए उपयोगकर्ता वरीयता पर निर्भर करें)

यदि आप चाहते हैं कि पृष्ठ एक नई "वास्तविक" विंडो में खोला जाए, तो आपको अतिरिक्त पैरामीटर लगाना होगा। पसंद:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

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

लेकिन कुछ उलझन में है और बहुत से गलत उत्तर बता सकता है:

इस:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

और इस:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

एक ही परिणाम नहीं देगा।

पहले मामले में, जैसा कि आप पहले अतिरिक्त पैरामीटर के बिना एक पृष्ठ खोलते हैं , यह एक नए टैब में खुलेगा । और इस स्थिति में, इस टैब में दूसरी कॉल भी खोली जाएगी गए नाम के कारण ।

दूसरे मामले में, जैसा कि आपका पहला कॉल अतिरिक्त पैरामीटर के साथ किया गया है, पृष्ठ एक नई " वास्तविक विंडो " में खोला जाएगा । और उस स्थिति में, भले ही दूसरा कॉल अतिरिक्त पैरामीटर के बिना किया जाता है, यह इस नई " वास्तविक विंडो में भी खोला जाएगा " ... लेकिन अन्य टैब!

इसका मतलब यह है कि पहली कॉल महत्वपूर्ण है क्योंकि यह निर्णय लिया गया है कि पेज को कहां रखा जाए।


इस उत्तर में ++++
मिच वनड्यूइन

9

आप की जरूरत नहीं होनी चाहिए उपयोगकर्ता को जो भी प्राथमिकताएं चाहिए, उन्हें अनुमति दें।

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


31
तुम बिलकुल गलत हो। और वैसे भी, "आपको चाहिए" की आवश्यकता उचित नहीं है, खासकर यदि यह ऐसा कुछ है जो बॉस चाहता है

8
आओ हम टिप्पणियों को व्यावहारिक और उपयोगी बनाने का प्रयास करें। हम अपमान किए बिना असहमत हो सकते हैं।
adam

17
@theman_on_vista: अपने बॉस को समझाना आपकी जिम्मेदारी है। आपकी कंपनी ने आपको डिजाइन मुद्दों को हल करने की जिम्मेदारी दी है। इसमें गलत डिजाइन विचारों को इंगित करना शामिल है।
एफ्रेम

2
सच है। स्क्रीन उपयोगकर्ता का है, और कोई नहीं।
क्रिस्टोफर क्रेतुज़िग

12
यह पॉपअप या टैब चुनने के लिए डिजाइनर के दायरे में है। जब मैं एक उपयोगकर्ता हूं जो हमेशा टैब पसंद करता है, तो मुझे लगता है कि कभी-कभी, डिज़ाइन वास्तव में पॉपअप के लिए कॉल करता है या वास्तव में टैब के लिए कॉल करता है। इसे संभव बनाने के लिए प्रोग्रामर के दायरे में होना चाहिए। दार्शनिक मतभेदों को एक तरफ रखते हुए, इस तरह की टिप्पणी एक प्रोग्रामिंग संदर्भ साइट के लिए पूरी तरह से अनुचित है। और इस मामले में, यह "क्या मुझे नहीं चाहिए?" सवाल। यह "मैं कैसे करूँ?"
3

9

आप निम्नलिखित समारोह की कोशिश कर सकते हैं:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

निष्पादन के लिए HTML कोड:

<a href="#" onclick="open('http://www.google.com')">google search</a>

2
का उद्देश्य क्या है popup.location = URL;? window.open()कॉल उचित यूआरएल के लिए इसे खोलने चाहिए, और अपने कोड के उदाहरण में, URLपरिभाषित नहीं है तो यह प्रयोगात्मक (और नहीं व्यापक रूप से समर्थन) में वापस आने का जा रहा है यूआरएल वस्तु । इसके लिए उपयोग करते समय यह बहस का मुद्दा है, मैं उत्सुक हूं कि इसके उपयोग के लिए प्रेरणाएं क्या हैं?
केन

ठोस जवाब और मुझे सिखाया कि स्थान को गैर-संपादन योग्य कैसे बनाया जाए। धन्यवाद
VirtualProdigy

6

कुंजी पैरामीटर है:

यदि आप प्रदान पैरामीटर [ऊंचाई = "", चौड़ाई = ""], तो यह नई विंडो में खुलेगा।

यदि आप प्रदान नहीं करते हैं पैरामीटर , तो यह नए टैब में खुलेगा।

क्रोम और फ़ायरफ़ॉक्स में परीक्षण किया गया


1
newwin = window.open ('test.aspx', '', ''); Chrome में परीक्षण किया गया: 26
मुनिआर

5

दिलचस्प है, मैंने पाया कि यदि आप एक खाली में गुजरते हैं window.open की तीसरी विशेषता के लिए स्ट्रिंग (एक अशक्त स्ट्रिंग, या गुणों की सूची के विपरीत) में पास होते हैं, तो यह क्रोम, फ़ायरफ़ॉक्स और IE के लिए एक नए टैब में खुलेगा। यदि अनुपस्थित रहे, तो व्यवहार अलग था।

तो, यह मेरी नई कॉल है:

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

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

4

उस विधि का प्रयास करें .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }

3

मेरे लिए समाधान तो होना ही था

"location=0"

3 पैरामीटर में। नवीनतम एफएफ / क्रोम और IE11 के पुराने संस्करण पर परीक्षण किया गया

पूर्ण विधि कॉल I का उपयोग नीचे है (जैसा कि मुझे एक चर चौड़ाई का उपयोग करना पसंद है):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');

2

मैंने सिर्फ IE (11) और क्रोम (54.0.2794.1 कैनरी सिज़नस) के साथ यह कोशिश की:

window.open(url, "_blank", "x=y")

... और यह एक नई विंडो में खुल गया।

जिसका अर्थ है कि क्लिंट पाच ने इसे सही कहा था जब उन्होंने कहा था कि किसी भी एक पैरामीटर को प्रदान करने से नई विंडो खुल जाएगी।

- और जाहिर है यह एक वैध पैरामीटर नहीं है!

(YMMV - जैसा कि मैंने कहा, मैंने केवल दो स्थानों पर इसका परीक्षण किया है ... और अगले अपग्रेड परिणामों को अमान्य कर सकता है, किसी भी तरह से)

ईटीए: मैंने अभी देखा, हालांकि - आईई में, खिड़की की कोई सजावट नहीं है।


1

यहाँ उत्तर दिया । लेकिन संदर्भ के लिए इसे फिर से पोस्ट करना।

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विकल्प सेट के साथ अजाक्स कॉल कर रहे हैं ।


1

मुझे लगता है कि इसकी html लक्ष्य गुण समस्या नहीं है, लेकिन आपने "फ़ायरफ़ॉक्स के अंतर्गत" टैब "टैब" विकल्प में "विकल्प के बजाय एक नई टैब में" खुली एनडब्ल्यू खिड़कियां अनियंत्रित की हैं। इसे जांचें और पुन: प्रयास करें।

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


0

मेरा भी यही प्रश्न था, लेकिन इसका अपेक्षाकृत सरल समाधान मिला।

जावास्क्रिप्ट में मैं यह window.opener !=null;निर्धारित करने के लिए जाँच कर रहा था कि खिड़की पॉप अप है या नहीं। यदि आप कुछ समान पहचान कोड का उपयोग कर रहे हैं, तो यह निर्धारित करने के लिए कि आप जिस साइट पर जा रहे हैं, वह पॉप अप है, आप आसानी से "इसे बंद कर सकते हैं " जब आप नई विंडो जावास्क्रिप्ट का उपयोग करके "नई" विंडो खोलना चाहते हैं ।

बस इसे अपने पृष्ठ के शीर्ष पर रखें जिसे आप हमेशा एक "नई" विंडो बनाना चाहते हैं।

<script type="text/javascript">
    window.opener=null;
</script>

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

आप एक साधारण रीडायरेक्ट पेज भी बना सकते हैं जो ऐसा करता है और फिर आपके द्वारा दिए गए URL पर जाता है। कुछ इस तरह,

माता-पिता पृष्ठ पर जावास्क्रिप्ट:

window.open("MyRedirect.html?URL="+URL, "_blank");

और फिर यहाँ से थोड़ी जावास्क्रिप्ट का उपयोग करके आप URL प्राप्त कर सकते हैं और इसे रीडायरेक्ट कर सकते हैं।

रीडायरेक्ट पृष्ठ पर जावास्क्रिप्ट:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.