जावास्क्रिप्ट में लक्ष्य = "रिक्त" कैसे अनुकरण करें


156

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

<body onLoad="document.getElementById('redirect').click">
<a href="http://www.mydomain.com?ReportID=1" id="redirect" target="_blank">Report</a>
</body>

1
हम्म? target="_top"एक नई विंडो में नहीं खुलता है - target="_blank"करता है।
तोमलक

यदि लिंक पहले से ही एक नई विंडो में खुल रहा है (लक्ष्य = "_ रिक्त" के कारण) और जावास्क्रिप्ट क्लिक हैंडलर पहले से ही आपके डेटाबेस को अपडेट कर रहा है, तो आपको जावास्क्रिप्ट के साथ नई विंडो को खोलने की आवश्यकता क्यों होगी?
जोएल मुलर

जवाबों:


298
<script>
    window.open('http://www.example.com?ReportID=1', '_blank');
</script>

दूसरा पैरामीटर वैकल्पिक है और लक्ष्य विंडो का नाम है।


2
window.openक्या target="_blank"करता है - यह एक नई विंडो में URL खोलता है।
सियाजयोज़

3
हाँ। दूसरा तर्क। window.open () वह "नाम" है जिसे आप लिंक पर लक्ष्य निर्धारित करने के समान, विंडो देना चाहते हैं। developer.mozilla.org/En/DOM:window.open
ओमर बोखारी

2
ओह मैं समझा। window.open फ़ायरफ़ॉक्स पॉप-अप ब्लॉकर द्वारा अवरुद्ध है, लेकिन लक्ष्य = "_ blank" नहीं है। क्या मुझे ग्राहक से केवल अपनी वेबसाइट से पॉपअप सक्षम करने के लिए कहना चाहिए?
फिलिप सन्नी

7
क्या कोई जावास्क्रिप्ट समाधान है जो फ़ायरफ़ॉक्स की तरह पॉप-अप ब्लॉकर्स द्वारा अवरुद्ध नहीं होता है?
ma11hew28

4
@MattDiPasquale window.open को ब्लॉक करना पॉप-अप ब्लॉकर्स का बिंदु है! यदि आप क्लिक एक्शन के जवाब में कॉल करते हैं तो यह अवरुद्ध नहीं होने की बेहतर संभावना है।
विलियम डेनिस

19

यह मदद कर सकता है

var link = document.createElementNS("http://www.w3.org/1999/xhtml", "a");
    link.href = 'http://www.google.com';
    link.target = '_blank';
    var event = new MouseEvent('click', {
        'view': window,
        'bubbles': false,
        'cancelable': true
    });
    link.dispatchEvent(event);

IE11: "रनटाइम जावास्क्रिप्ट त्रुटि: ऑब्जेक्ट के लिए एक वैध कार्रवाई नहीं"
टी-मोटी

8
यह उत्तर क्या हो रहा है के कुछ विवरण जोड़कर सुधार किया जा सकता है
Elly Post

13

मुझे पता है कि यह एक किया और सुलझा हुआ सौदा है, लेकिन यहां मैं अपने ऐप में समस्या को हल करने के लिए उपयोग कर रहा हूं।

if (!e.target.hasAttribute("target")) {
    e.preventDefault();     
    e.target.setAttribute("target", "_blank");
    e.target.click();
    return;
}

मूल रूप से यहाँ क्या चल रहा है, अगर लिंक में कोई target=_blankविशेषता है तो मैं उसके लिए एक चेक चलाता हूं । यदि ऐसा नहीं होता है, तो यह लिंक को ट्रिगर करने से रोकता है, इसे एक नई विंडो में खोलने के लिए सेट करता है, फिर प्रोग्रामेटिक रूप से इस पर क्लिक करता है।

आप एक कदम आगे जा सकते हैं और मूल क्लिक को रोकना (और अपने कोड को पूरी तरह से अधिक कॉम्पैक्ट बना सकते हैं) यह कोशिश करके:

if (!e.target.hasAttribute("target")) {
    e.target.setAttribute("target", "_blank");
}

यदि आप एक विशेषता क्रॉस-ब्राउज़र जोड़ने के कार्यान्वयन को दूर करने के लिए jQuery का उपयोग कर रहे थे, तो आपको इसके बजाय इसका उपयोग करना चाहिए e.target.setAttribute("target", "_blank"):

    jQuery(event.target).attr("target", "_blank")

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

यहाँ आप के साथ गड़बड़ करने के लिए कार्रवाई में इसका एक डेमो है।

(Jsfiddle में लिंक इस चर्चा में वापस आता है .. कोई नया टैब नहीं चाहिए :))


1
मैं इस उत्तर को अधिक पसंद करता हूं, क्योंकि, यह jquery का उपयोग करता है, और यह विंडो को रोकता है। पॉपअप ब्लॉकर मुद्दों को रोकता है। यह पूरी तरह से वैध है जब कुछ 3 पार्टी डेटा के साथ काम करते हैं जिसमें लिंक होते हैं जो लक्ष्य को याद कर रहे हैं।
इनक्रेडिबल

7

मैं व्यक्तिगत रूप से निम्नलिखित कोड का उपयोग करना पसंद करता हूं अगर यह एक लिंक के लिए है। अन्यथा यदि आप समान कोड के साथ एक फ़ंक्शन बनाते हैं तो यह संभवतः सबसे अच्छा है।

onclick="this.target='_blank';"

मैंने W3C की XHTML सख्त परीक्षा को बायपास करने के लिए इसका उपयोग करना शुरू कर दिया।


1
मुझे लगता है कि इनलाइन जावास्क्रिप्ट "गैर-मानक" विशेषता को जोड़ने से ज्यादा गड़बड़ है जो हर जगह काम करता है।
मत्ती वीरकुंकेन

@ माटी विर्ककुनेन कुछ स्थितियों में इसका एकमात्र समाधान है
क्लॉडिउ क्रेगना

1
@ कलैडियू: यदि आप खुद को ऐसी बेतुकी स्थिति में पाते हैं तो आपको इसके आसपास कीचड़ के कारण को ठीक करना चाहिए।
मैटी विर्ककुनेन 16

5

यह है कि मैं इसे jQuery के साथ कैसे करता हूं। मेरे पास प्रत्येक लिंक के लिए एक वर्ग है जिसे मैं नई विंडो में खोलना चाहता हूं।

$(function(){

    $(".external").click(function(e) {
        e.preventDefault();
        window.open(this.href);
    });
});

2

आप एक टैग से href निकाल सकते हैं:

window.open(document.getElementById('redirect').href);

1

इससे आपको सभी पेज लिंक खोलने में मदद मिल सकती है :

$(".myClass").each(
     function(i,e){
        window.open(e, '_blank');
     }
);

यह हर <a href="" class="myClass"></a>लिंक आइटम को दूसरे टैब पर खोलेगा जैसे आपने हर एक पर क्लिक किया होगा।

आपको इसे केवल ब्राउज़र कंसोल पर पेस्ट करना होगा। jQuery के ढांचे की आवश्यकता

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