2010-05-11 10 views
17

Google और याहू खोज पृष्ठों पर, 10 खोज परिणाम लिंक के URL वास्तव में google.com या yahoo.com पर इंगित करते हैं। यूआरएल में अतिरिक्त तर्क हैं जो लिंक पर क्लिक होने पर google.com या yahoo.com को वास्तविक खोज परिणाम पर रीडायरेक्ट करने की अनुमति देते हैं। जब उपयोगकर्ता लिंक पर मॉल करता है, तो खोज परिणाम यूआरएल (और google.com या yahoo.com यूआरएल नहीं) ब्राउज़र की स्टेटस बार में प्रदर्शित होता है।ब्राउज़र और स्टेटस बार में यूआरएल को यूआरएल कैसे बदलता है?

मुझे आश्चर्य है कि वे ऐसा कैसे करते हैं।

कई साल पहले, यह कुछ जावास्क्रिप्ट कि window.status सेट होने से पूरा किया गया होता, लेकिन है कि, अब और काम करने के लिए के रूप में मैं एक लिंक है कि इस तरह दिखता है द्वारा Reliable cross browser way of setting Status bar text

समझाया गया है प्रतीत नहीं होता : <a href="http://somedomain.com/ReallyLongURLThatShouldNotBeSeenInTheStatusBar" onmouseover="window.status='http://niceShourtUrl.com/'" onmouseout="window.status=''">Click Me</a>

इस लिंक ने window.status रणनीति का उपयोग करने की कोशिश की, लेकिन यह काम नहीं करता है। मैं इस लिंक को कैसे ठीक करूं ताकि यह Google और Yahoo के खोज परिणाम पृष्ठों पर लिंक की तरह कार्य करे? इस उदाहरण में, मैं "http://niceShourtUrl.com/" स्टेटस बार में प्रदर्शित होने के लिए चाहता हूं जब उपयोगकर्ता लिंक पर मॉल करता है।

+0

+1 बहुत ही रोचक सवाल। – Armstrongest

उत्तर

12

स्रोत को पढ़ना मुश्किल है, लेकिन आप देखेंगे कि वास्तव में यूआरएल (<a> टैग में) सही गंतव्य यूआरएल हैं, यही कारण है कि ब्राउज़र की स्टेटस बार सही यूआरएल दिखाती है (ट्रैकिंग लिंक के बजाय जब आप वास्तव में क्लिक करते हैं तो यह आपको रीडायरेक्ट करता है)। उसके बाद कुछ onclick जावास्क्रिप्ट है जो ब्राउज़र के डिफ़ॉल्ट क्रिया (लिंक के बाद) होने से पहले क्लिक को रोक सकता है।

+0

तो, मुझे लगता है कि वे राइट-क्लिक> ट्रैक नहीं करते हैं> नए टैब में खोलें या – Armstrongest

+0

@ एटॉमिटॉन पर क्लिक करें। बेशक वे इसे "ट्रैक" नहीं करते हैं। जावास्क्रिप्ट के ब्राउज़र कार्यान्वयन इसे वैध क्लिक के रूप में मानता है और ईवेंट हैंडलर को आग लगा देता है। –

+0

@ जोश: क्या यह होगा? क्या नया टैब में राइट-क्लिक> राइट-क्लिक नहीं है 'बस को एक नए टैब के एड्रेस बार में कॉपी और पेस्ट करें? मुझे इस मामले में गोलीबारी करने वाली किसी भी जावास्क्रिप्ट घटनाओं को याद नहीं किया जा सकता है। संपादित करें: आह! mousedown घटना सभी बटन जाल ... बाएं, दाएं और बीच। – Armstrongest

6

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

+1

हां, वे ट्रैकिंग के लिए उस यूआरएल के लिए कुछ अद्वितीय आईडी रिकॉर्ड करने के लिए स्क्रिप्टिंग का उपयोग करते हैं, लेकिन यह अभी भी वास्तविक पृष्ठ का वास्तविक लिंक है। @ माइक डब्ल्यू: क्या आपने स्रोत कोड देखने के लिए फायरबग का उपयोग करने का प्रयास किया था? आप पेज पर वास्तविक href लिंक पॉइंट देख सकते हैं, न कि Google पेज पर। – animuson

2

उदाहरण के लिए StackOverflow के लिए लिंक इस तरह वास्तव में दिखता है:

<a onmousedown="return clk(this.href,'','','res','1','','0CBwQFjAA')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a> 

अब क्लिक समारोह है कि कम से कम स्रोत कोड के अंदर कहीं न कहीं है। यहाँ आप कुछ अतिरिक्त सफेद स्थान के साथ कोड है:

window.clk = function (e, f, g, k, l, b, m) 
{ 
    if (document.images) 
    { 
     var a = encodeURIComponent || escape, 
      c = new Image, 
      h = window.google.cri++; 

     window.google.crm[h] = c; 
     c.onerror = c.onload = c.onabort = function() 
     { 
      delete window.google.crm[h] 
     }; 

     var d, i, j; 

     if (google.v6) 
     { 
      d = google.v6.src; 
      i = google.v6.complete || google.v6s ? 2 : 1; 
      j = (new Date).getTime() - google.v6t; delete google.v6 
     } 

     if (b != "" && b.substring(0, 6) != "&sig2=") 
      b = "&sig2=" + b; 

     c.src = [ 
       "/url?sa=T", 
       "&source=" + google.sn, 
       f ? "&oi=" + a(f) : "", 
       g ? "&cad=" + a(g) : "", 
       "&ct=", 
       a(k || "res"), 
       "&cd=", 
       a(l), 
       "&ved=", 
       a(m), 
       e ? "&url=" + a(e.replace(/#.*/, "")).replace(/\+/g, "%2B") : "", 
       "&ei=", 
       google.kEI, 
       d ? "&v6u=" + a(d) + "&v6s=" + i + "&v6t=" + j : "", 
       b ].join("") 
    } 
    return true 
}; 

वास्तव में विस्तार से इसे देख के बिना, यह के बारे में महत्वपूर्ण विचार है कि यह कुछ गूगल यूआरएल की गणना करता है, और this.href सेट (= लिंक के लिंक लक्ष्य!) करने के लिए जब आप लिंक पर क्लिक करते हैं तो वह नया यूआरएल। उसके बाद लिंक का मूल्यांकन किया जाता है और ब्राउज़र आपको मूल लिंक यूआरएल दिखाने के बावजूद उस यूआरएल को बदल देता है।

+1

मुझे इस फ़ंक्शन में कहीं भी नहीं दिखाई देता है, जहां यह वास्तव में 'this.href' बदल रहा है, यह केवल प्रारंभिक कॉल के माध्यम से फ़ंक्शन पर भेजा गया है ... मेरे लिए ऐसा लगता है कि यह फ़ंक्शन किसी छवि के स्रोत को कहीं और बदल देता है। – animuson

6

Google पर Google लिंक पर इंगित करने वाले मूल स्रोत से लिंक को बदलने वाले प्रत्येक लिंक पर MouseDown हैंडलर हैं। तो onmousedown लिंक को प्रतिस्थापित करता है और जब onClick प्रकट होता है (जल्द ही ऑनमौसेडाउन के बाद) लिंक मूल दिशा से पहले कहीं और इंगित कर रहा है।

एक लिंक पर चरण 1. उपयोगकर्ता क्लिक (माउस बटन दबाए है)

चरण 2. onMouseDown ईवेंट ट्रिगर

चरण 3. लिंक लक्ष्य (एक href मूल्य) बदल दिया जाता है

चरण 4 माउस बटन

चरण 5 आता है।onClick ईवेंट ट्रिगर

चरण 6. ब्राउज़र देखता है कि एक लिंक पर क्लिक किया गया था और वांछित गंतव्य (एक पहले से ही बदल href मूल्य द्वारा निर्धारित)

चरण 7. ब्राउज़र को खोलता है एक गूगल पुनर्निर्देशित पेज और इस आगे खेलने उपयोगकर्ता अग्रेषित करता है उपयोगकर्ता को मूल गंतव्य

अपडेट किया गया: Google केवल एक ऑनमोस्डउन ईवेंट पर क्लिक ट्रैक करने के लिए उपयोग किया जाता था और लिंक गंतव्य को परिवर्तित नहीं करता था। जब किसी लिंक पर माउस बटन दबाया गया था, तो Google सर्वर की ओर एक छवि लोडिंग अनुरोध किया गया था, जिस पर क्लिक किया गया था (onmousedown => new Image("coogle.counter.server.com/link=www.pressed.com")) लेकिन मुझे लगता है कि इसका दुरुपयोग किया गया था या यह पर्याप्त विश्वसनीय नहीं था कि उन्होंने वर्तमान लिंक बदलने तकनीक का उपयोग करने का निर्णय लिया।

+0

नहीं, यह नहीं है। यदि आप नीचे पोस्ट किए गए कोड पर बारीकी से देखते हैं, तो आप देखेंगे कि href वास्तव में कभी नहीं बदला गया है। – animuson

+0

हां यह करता है - यह निर्भर करता है कि वर्तमान में कौन सा फ़ंक्शन उपयोग किया जाता है - क्लर्क() या rwt()। rwt() ठीक वही करता है जो मैंने वर्णित किया है। – Andris

+0

और वास्तव में clk भी बदलता है href – Andris

1

यह एक मल्टीपार्ट प्रक्रिया है। दिए गए <a> टैग के लिए, HTML में href विशेषता वास्तविक पृष्ठ को इंगित करेगी। यह जावास्क्रिप्ट के बिना ब्राउज़र को सही जगह पर जाने की अनुमति देता है।

अगला, लिंक पर mousedown ईवेंट हैंडलर है। जब आप लिंक पर होवर करते हैं तो माउस बटन दबाते समय mousedown घटना आग लगती है। यह घटना दाएं या मध्य माउस बटन दबाए जाने पर भी आग लगती है। हैंडलर href को खोज इंजन के डोमेन में रीडायरेक्टिंग स्क्रिप्ट के साथ बदल देता है।

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

0

ऐसा प्रतीत होता है कि वे आपके उदाहरण में आपके पास क्या विपरीत हैं। उनके पास href = "लिंक" और ऑनक्लिक ईवेंट ट्रैकिंग फ़ंक्शन के रूप में है।

संबंधित मुद्दे