2011-01-11 13 views
11

मैं बहुत की तरह एक नई विंडो खोलने की कोशिश कर रहा हूँ सफारी में काम नहीं कर रहा एक क्लिक घटना के बाद नई विंडो खोलें,:क्रोम

$('#wrapper').click(function() { 
    window.setTimeout(function() { 
     //alert('hi'); 
     window.open("http://example.com", "ExternalLinks", "resizable=yes, scrollbars=yes, status=yes"); 
    }, 1000); 
}); 

यह फ़ायरफ़ॉक्स में काम करता है, लेकिन Chrome या Safari (अब तक में नहीं, मैंने अभी मैक पर परीक्षण किया है)। alert() सभी ब्राउज़रों में काम करता है, इसलिए सफारी/क्रोम में निष्पादन से window.open को रोकने से कुछ ऐसा लगता है। इसके अलावा, अगर मैं setTimeout हटा देता हूं और बस window.open पर कॉल करता हूं तो यह सभी 3 ब्राउज़रों में काम करता है। यह लगभग window.openclick ईवेंट से बहुत दूर घोंसला है, तो यह सफारी/क्रोम में काम नहीं करता है।

तो आप जानते हैं, मेरे पास एक अखिल-फ्लैश वेबसाइट है और मैं एक नई विंडो में खोलने के लिए बाहरी लिंक प्राप्त करने की कोशिश कर रहा हूं, इसलिए मैं यूआरएल में हैश टैग पढ़ रहा हूं (उदा। एचटीपी: // उदाहरण .com/#/facebook /) और यदि यह कुछ वस्तुओं से मेल खाता है, तो मैं एक विशिष्ट यूआरएल खोलने के लिए window.open पर कॉल कर रहा हूं। मेरे पास फ्लैश स्रोत तक पहुंच नहीं है, या मैं इसे वहां संभाल दूंगा।

कोई विचार?

उत्तर

14

सफारी/क्रोम में पॉप-अप अवरोधक हैं जो इसे काम करने से रोकते हैं। सफारी/क्रोम में एक नई विंडो खोलने की अनुमति देने वाला एकमात्र जावास्क्रिप्ट जावास्क्रिप्ट सीधे क्लिक हैंडलर (और अन्य प्रत्यक्ष उपयोगकर्ता इनपुट हैंडलर) से जुड़ा हुआ है। पिछले संस्करणों में लोगों ने धोखा देने के कुछ तरीकों का पता लगाया (जैसे कुछ अन्य तत्व उत्पन्न करना - एक फॉर्म या div - और जावास्क्रिप्ट के साथ उपयोगकर्ता इनपुट अनुकरण करना), लेकिन नए संस्करण इस का पता लगाने के बारे में अधिक स्मार्ट हैं। मैं चीजों को पुनः कॉन्फ़िगर करने की अनुशंसा करता हूं ताकि आप देरी वाले पॉप-अप का उपयोग न करें - यह ऐसी चीज है जो आम तौर पर उपयोगकर्ता के लिए झटकेदार हो सकती है।

+1

यह भी ध्यान देने योग्य है कि सफारी और क्रोम में इन सख्त पॉपअप ब्लॉकर्स डिफ़ॉल्ट रूप से निर्मित और चालू होते हैं, ऐसा नहीं है कि अन्य ब्राउज़रों में उनके पास नहीं है - यह सिर्फ अन्य ब्राउज़रों के लिए है वे या तो एड-ऑन हैं या स्वचालित रूप से इंस्टॉलेशन समय पर चालू नहीं होते हैं। –

7

मुझे अपरिभाषित के लिए window.open() के वापसी मूल्य की जांच करके इसके आसपास मिल गया। यदि यह उपयोगकर्ता के लिए उनके पॉपअप अवरोधक को अक्षम करने के लिए एक संदेश के साथ सही कॉल अलर्ट() है।

var myWin = window.open([args]); 

if (myWin == undefined) 
    alert('Please disable your popup blocker'); 
+1

उपयोगी प्रतिक्रिया। धन्यवाद। – matthewpavkov

0

एक और वैकल्पिक हल
बस स्वीकार करते हैं और रद्द विकल्प और स्वीकार करने के लिए बटन window.open
कार्रवाई देते हैं और कहीं भी होगी कार्यों के साथ एक पॉपअप खोलें। यह मेरे लिए काम किया ...