2009-07-23 10 views
13

मैं वर्तमान में निम्नलिखित कार्रवाई पर गूगल क्रोम लड़ रहा हूँ:इतिहास के साथ क्रॉस ब्राउज़र जावास्क्रिप्ट रीडायरेक्ट के लिए एक अच्छा समाधान क्या है?

location.href = url 

location.replace(url) 

document.location = url 

window.navigate(url) // doesn't work in Chrome/Firefox 

location.assign(url) 

window.open(url, '_self') 

window.location.href = url 

मैं सभी की कोशिश की है, और न तो एक इतिहास प्रविष्टि जोड़ देगा। क्या Google Chrome में इतिहास के साथ जावास्क्रिप्ट रीडायरेक्ट करने का कोई तरीका है?

धन्यवाद।


स्पष्टीकरण हम मदों की एक मेज है, जब पंक्ति पर क्लिक, मैं पेज, एक निर्दिष्ट URL पर नेविगेट करने के लिए अगर कोई onclick का उपयोग करने से यह अन्य के लिए एक अच्छा समाधान है चाहता हूँ = भेज विधि अब हम उपयोग कर रहे हैं, कृपया मुझे बताएं।


अद्यतन ऐसा प्रतीत होता है Stackoverflow अपने स्वयं इस सटीक एक ही मुद्दा है। मुख्य दृश्य में, प्रश्न सूची (# उत्तरों, आदि ..) में पहले 3 कॉलम में से एक पर क्लिक करें, फिर बैक बटन पर क्लिक करें, यह आपको 2 पेज वापस ले जाएगा।

+0

मैंने अपना जवाब संपादित किया। कृपया इसे आजमाएं। –

+2

इसके अलावा, क्रोम मेरे लिए सही तरीके से व्यवहार करता है। जैसा कि अपेक्षित है, यह वापस चला जाता है। –

+0

मैं इसे आज एक छोटा सा प्रयास दूंगा, देखें कि jquery समाधान के साथ कार्यान्वित करना आसान है या नहीं। –

उत्तर

6

हालांकि, मुझे पहले यह कहना होगा कि यह क्रोम बेवकूफ व्यवहार कर रहा है, और आपको शायद इसके बारे में चिंता न करें। एक डमी फार्म और एक GET विधि के साथ और प्रोग्राम के रूप में जमा कर दें बनाने का प्रयास करें ...

<form id="dummyForm" method="GET" action="#"> 
    <input type="hidden" name="test" value="test" /> 
</form> 

फिर अपने onclick ...

var frm = document.forms["dummyForm"]; 
frm.action = url; 
frm.submit(); 
+0

मेरा जवाब देखें, लेकिन मूल रूप से मैंने यह विधि ली और यह बहुत अच्छा काम किया, धन्यवाद! –

+0

मुझे पता है कि यह एक आदर्श समाधान से बहुत दूर है, लेकिन मुझे खुशी है कि यह आपके लिए काम करता है! –

+0

इस प्रकार का रीडायरेक्ट JQuery 1.7.1 और निम्न कोड का उपयोग करके फ़ायरफ़ॉक्स 13.0.1 में मेरे लिए काम नहीं करता है: '$ ('

<इनपुट प्रकार =" छुपा "नाम =" एप्लिकेशन "मान =" सफलता "/>
')। सबमिट करें();'। हालांकि, यह काम करता है यदि आप कुछ ऐसा करते हैं: '$ ('
<इनपुट प्रकार =" छुपा "नाम =" एप्लिकेशन "मूल्य =" सफलता "/>
') .appendTo (' body '); । Document.getElementById ('dummyForm') प्रस्तुत(); '। – Barbarrosa

0

क्या आप jQuery का उपयोग करते हैं सकता है की तरह कुछ है:

$("table tbody td").wrapInner('<a href="myurl.htm?id=' + getTheIDSomehow + '"></a>'); 

चूंकि मुझे आपके मार्कअप की संरचना नहीं पता है, इसलिए यह एक और विशिष्ट फिक्स प्रदान करना मुश्किल है।

jQuery documentation on wrapInner देखें।

0

जेएस के साथ एक लिंक "क्लिक" करने के बारे में क्या?

<a href="/url.html" id="clickme">blah blah</a> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#clickme').click(); 
}); 
</script> 

मुझे यकीन नहीं है कि यह काम है, लेकिन यह लिंक पर क्लिक करने वाले उपयोगकर्ता की नकल करनी चाहिए।

+0

मुझे एहसास है कि यह एक प्राचीन उत्तर है, लेकिन मेरा मानना ​​है कि '.click()' केवल 'टैग' पर पंजीकृत किसी भी 'क्लिक' ईवेंट को ट्रिगर करेगा। मै गलत हो सकता हूँ। मुझे हाल ही में एक समस्या थी जहां यह काम नहीं करता था और मुझे 'jquery.simulate.js' का उपयोग करना पड़ा। – keyboardSmasher

0

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

यहां एक पूरी तरह से काम कर रहे संस्करण है।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<title>Row Navigation with History</title> 
<style type="text/css"> 
    body { 
     font: 14px Georgia, serif; 
    } 

    #page-wrap { 
     width: 800px; 
     margin: 0 auto; 
    } 

    table { 
     border-collapse:collapse; 
     width:100%; 
    } 
    thead { 
     text-align:left; 
     font: 16px serif; 
    } 
    tbody { 
     font: 14px Georgia, serif; 
    } 

    tr { 
     cursor:pointer; 
    } 

    td { 
     border: 1px solid #ccc; 
     padding:10px; 
    } 

    .slim { 
     width:88px; 
    } 

    .wide { 
     width:300px; 
    } 

    .hover { 
     background-color:#eee; 
    } 

</style> 
<script src="http://www.google.com/jsapi" type="text/javascript"></script> 
<script type="text/javascript"> 
    google.load("jquery", "1.3.2"); 
</script> 
<script type="text/javascript"> 
    $(function() { 

     $("td").hover(function() { 
      $(this).parent().addClass("hover"); 
     }, function() { 
      $(this).parent().removeClass("hover"); 
     }); 


     $("tr").click(function() { 
      if (navigator.userAgent.toString().indexOf("Chrome/2") != -1) 
      { 
       var form = $("<form></form>"); 
       form.attr("method", "get"); 
       form.attr("action", $(this).attr("rel")); 
       form.submit(); 
      } else { 
       location.href = $(this).attr("rel"); 
      } 
     }); 
    }); 

</script> 

</head> 
<body> 
<div id="page-wrap"> 
<table> 
    <colgroup /> 
    <colgroup class="wide" /> 
    <colgroup class="slim" /> 
    <colgroup class="slim" /> 
    <thead> 
     <tr> 
      <th>Title</th> 
      <th>Description</th> 
      <th>Date</th> 
      <th>Status</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr rel="http://stackoverflow.com/questions/1173912/what-is-a-good-solution-for-cross-browser-javascript-redirect-with-history"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
     <tr rel="http://www.stackoverflow.com"> 
      <td>Title</td> 
      <td>Description</td> 
      <td>1/1/2009</td> 
      <td>Available</td> 
     </tr> 
    </tbody> 
</table> 
</div> 
</body> 
</html> 
0

क्रोम समर्थित स्थान नहीं है। पुनः लोड करें। उपयोग window.open (यूआरएल, '_self') पेज के लिए @Josh Stodola के आधार पर

+0

जो वास्तव में इतिहास में नहीं जोड़ता है। –

2

सभी जावास्क्रिप्ट समाधान अनुप्रेषित का जवाब

function goTo(url, data){ 
    var ele_form = document.createElement("FORM"); 
    ele_form.method = "POST"; 
    ele_form.id = 'dummy_form'; 
    ele_form.action = url; 
    if (!!data){ 
     for(key in data){ 
      var dummy_ele = document.createElement('INPUT'); 
      dummy_ele.name = key; 
      dummy_ele.value = data[key]; 
      dummy_ele.type = 'hidden'; 
      ele_form.appendChild(dummy_ele); 
     } 
    } 
    document.getElementsByTagName('body')[0].append(ele_form); 
    document.getElementById('dummy_form').submit(); 
} 
+0

हाय, rbawaskar, मैंने इसका परीक्षण करने के बाद। यह आईई 8 और क्रोम में ठीक काम करता है, लेकिन रीडायरेक्ट यूआरएल एक अनावश्यक प्रश्न चिह्न के साथ समाप्त होता है, इसे कैसे हटाया जाए? धन्यवाद –

+0

उत्तर अपडेट किया गया ... POST के रूप में जोड़ा गया फॉर्म विधि – rbawaskar

0

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन आप एक को नेविगेट कर रहे है, तो

window.location = "items/123"; 
0

यहाँ एक अच्छा कार्यात्मक और स्वच्छ jQuery समाधान जोश Stodola के आधार पर (जिसके लिए काम नहीं किया है: एक ही पृष्ठ पर लिंक, तो आप बस निम्नलिखित है, जहां 123 आइटम आईडी है ऐसा करने में सक्षम होना चाहिए मुझे)।

function redirect(url, data) { 
    var form = $('<form method="get"></form>'); 
    form.attr("action", url); 

    for (key in data){ 
     var input = $('<input type="hidden"/>'); 

     input.attr("name", key); 
     input.attr("value", data[key]); 

     form.append(input); 
    } 

    $("body").append(form); 

    $(form)[0].submit(); 
} 
संबंधित मुद्दे