2012-08-05 24 views
12

ठीक है। मैं ट्विटर पर लॉगिन करने की कोशिश कर रहा हूं। विंडो इस कोड में नहीं खुल रही है। जो प्रतिक्रिया सतर्क हो जाती है वह शून्य नहीं है और लॉगिन स्क्रीन का लिंक है। कोई विचार?जावास्क्रिप्ट window.open काम नहीं कर रहा

var url = "./twitter_login.php"; 
var con = createPHPRequest(); 

con.open("POST",url,true); 
con.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
con.send(""); 

var response = ""; 

con.onreadystatechange = function() { 

    if(con.readyState==4 && con.status==200) { 

     response = con.responseText;  
     alert(response); 
     window.open(response,"twitter","menubar=1,resizable=1,width=350,height=500");   

    } 

} 
+6

अधिकांश ब्राउज़र ब्लॉक 'window.open' अगर यह किसी उपयोगकर्ता ईवेंट (कीबोर्ड, माउस) से संबद्ध नहीं है। – Zeta

उत्तर

32

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

आप यह सत्यापित कर सकते हैं कि अस्थायी रूप से आपके ब्राउज़र के पॉपअप अवरोधन को बंद कर रहा है (इसे बंद कर रहा है) और देखें कि यह काम करना शुरू कर देता है।

शायद आपको कार्य-आसपास के रूप में क्या करना है, उस उपयोगकर्ता की कार्रवाई पर विंडो बनाना है जिसने कोड के इस थ्रेड को शुरू किया था और फिर जब आप अपनी AJAX प्रतिक्रिया प्राप्त करते हैं तो सामग्री को विंडो में डाल दें। ब्राउज़र शायद इसकी अनुमति देगा। मुझे पता है कि एक दृश्य परिप्रेक्ष्य से कम वांछनीय है, लेकिन जब तक AJAX प्रतिक्रिया आती है (कुछ "लोड हो रहा है ...") तक आप विंडो में कुछ अस्थायी सामग्री डाल सकते हैं।

+7

आश्चर्यजनक रूप से उपयोगी! 'Window.open' के साथ क्लिक पर एक विंडो बनाएं, फिर इसे अपने कॉलबैक पर पास करें जिसमें आप 'mywindow.location = someurl' करेंगे – lajarre

1

बस यह वही समस्या थी। बस अगर आप इसे तय करने वाले कोड चाहते थे। मैंने इसका इस्तेमाल किया:

newWindow = window.open("", "_blank"); 

request = $.ajax({ ... my request which returns a url to load ... }) 

request.done((function(_this) { 
     return function(data, textStatus, jqXHR) { 
      return newWindow.location = data.Url; 
     }; 
     })(this)); 
संबंधित मुद्दे