2013-09-26 10 views
10

window.open() मुख्य थ्रेड से बुलाया गया जावास्क्रिप्ट विंडो.ऑपेन डिफ़ॉल्ट रूप से नया टैब खुलता है।कॉलबैक

लेकिन, यहां खुला नई विंडो हर बार (ओपेरा 16 और गूगल क्रोम 29)

<input type="button" value="Open" onclick="cb1()"> 

<script type="text/javascript"> 
function cb1() { 
    setTimeout(wo, 1000); //simple async 
} 

function wo() 
{ 
    var a = window.open("http://google.com", "w2"); 
    a.focus(); 
} 
</script> 

(lol, इस Open a URL in a new tab (and not a new window) using JavaScript के लिए मेरा उत्तर है)।

मैं टैब में कैसे (ब्राउज़र डिफ़ॉल्ट द्वारा) खोल सकता हूं?

+0

यह व्यवहार किस गतिविधि में होता है? – shanet

+0

उम्मीद है कि यह आपका _ [उत्तर] है (http://stackoverflow.com/questions/2601761/change-browser-settings-by-script) _। –

+0

सभी ब्राउज़रों। परीक्षण पृष्ठ <स्क्रिप्ट प्रकार = "टेक्स्ट/जावास्क्रिप्ट"> var i = 0; फ़ंक्शन ऑनकॉलबैक() { \t ओपनविन ('http: //google.com','win'+ (i ++)); } फ़ंक्शन टेस्ट (कॉलबैक) { \t सेटटाइमआउट (कॉलबैक, 3000); \t } फ़ंक्शन ओपनविन (यूआरएल, सीपीटी) { var a = window.open (url, cpt); ए.फोकस(); } user2819018

उत्तर

0

यदि कोई नई विंडो एक नए टैब के रूप में खोला गया है, या एक नया उदाहरण, उपयोगकर्ता सेटिंग्स पर निर्भर करता है।

+0

ओपी ने कहा कि कुछ परिस्थितियों में यह एक नए टैब में और दूसरों में एक नई विंडो में खोला गया है, इसलिए वह समस्या जो उपयोगकर्ता सेटिंग्स से स्पष्ट रूप से असंबंधित है। – Yogh

10

हम इसी समस्या से भाग गए और उत्तर के लिए SO के आसपास शिकार किया। जो हमने पाया वह हमारी परिस्थितियों में काम करता है और आसवित ज्ञान निम्नानुसार है:

समस्या ब्राउज़र पॉप-अप अवरोधकों से संबंधित है जो प्रोग्रामैटिक विंडो खुलती है। ब्राउज़र मुख्य थ्रेड पर होने वाले वास्तविक उपयोगकर्ता क्लिक से विंडो खुलता है। इसी प्रकार, यदि आप मुख्य धागे पर window.open को कॉल करते हैं, तो यह ऊपर बताए अनुसार काम करेगा। Open a URL in a new tab (and not a new window) using JavaScript पर इस उत्तर के मुताबिक यदि आप अजाक्स कॉल का उपयोग कर रहे हैं और सफलता पर विंडो खोलना चाहते हैं तो आपको async: false सेट करना होगा जो काम करता है क्योंकि यह सब कुछ मुख्य धागे पर रखेगा।

हम इस तरह हमारे अजाक्स कॉल को नियंत्रित नहीं कर सके, लेकिन एक और समाधान मिला जो उसी कारण से काम करता है। चेतावनी, यह थोड़ा हैकी है और आपके बाधाओं के लिए उपयुक्त नहीं हो सकता है। Open a URL in a new tab (and not a new window) using JavaScript पर एक अलग उत्तर पर एक टिप्पणी की सौजन्य setTimeout पर कॉल करने से पहले विंडो खोलें और फिर देरी वाले फ़ंक्शन में इसे अपडेट करें। ऐसा करने के कुछ तरीके हैं। या तो जब आप इसे खोलते हैं, तो w = window.open... पर सेट करें और w.location सेट करें या को उस लक्ष्य में खुले विलंबित कार्य में window.open('your-url', 'target_name') पर सेट करें, और संदर्भ रखने वाले ब्राउज़र पर भरोसा करें।

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

+1

उन लोगों के लिए जिन्हें कुछ और विस्तृत कोड की आवश्यकता है, इस ब्लॉग पोस्ट को देखें: http://theandystratton.com/2012/how-to-bypass-google-chromes-javascript-popup-blocker –