2009-11-06 2 views
0

Я пишу расширение для firefox. Используя dom.location для отслеживания посещенных страниц результатов поиска, я получаю этот url http://www.google.com/search?hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=642c18fb4411ca2e. Если вы нажмете на него, результаты поиска google для «hi» должны появиться. Вы узнаете это из строки заголовка - потому что остальная часть страницы не будет загружаться. Это происходит с любым поиском google. Как ни странно, если вы отрезаете часть его, так скажите, http://www.google.com/search?hl=en&source=hp&q=hi - это работает! Но Googling «привет» сам мне дает длинный URL-адрес - http://www.google.com/#hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=db658cc5049dc510. Я знаю, что в первый раз, когда URL-адрес был посещен, страница загружена, я сделал это сам.Неправильный URL-адрес Firefox?

Может ли кто-нибудь объяснить причину?

Я только что попробовал свой эксперимент, на этот раз сохраняя исходный URL-адрес в строке местоположения. Оказывается, dom.location.href дает другое значение. Как это происходит?

Оригинал:
http://www.google.com/#hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=642c18fb4411ca2e

dom.location.href
http://www.google.com/search?hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=642c18fb4411ca2e

window.addEventListener("load", function() { myExtension.init(); }, false); 

var myExtension = { 
    init: function() { 
    var appcontent = document.getElementById("appcontent"); // browser 
    if(appcontent) 
     appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true); 
    var messagepane = document.getElementById("messagepane"); // mail 
    if(messagepane) 
     messagepane.addEventListener("load", function() { myExtension.onPageLoad(); }, true); 
    }, 

    onPageLoad: function(aEvent) { 
    var doc = aEvent.originalTarget; // doc is document that triggered "onload" event 
    // do something with the loaded page. 
    // doc.location is a Location object (see below for a link). 
    // You can use it to make your code executed on certain pages only. 


var url = doc.location.href; 

if (url.match(/(?:p|q)(?:=)([^%]*)/)) {alert("MATCH" + url);resultsPages.push(url);} else {alert(url); 
    } 
} 

Этот фрагмент кода происходит непосредственно из Mozilla с согласования и предупреждения моих собственных. Прошу прощения за то, что ранее не отправлял код.

+0

Мой ответ стоит даже после вашего редактирования. Вероятно, вы получите событие загрузки для фрейма внутри основного документа в дополнение к событию загрузки для основного документа. Googling должен найти способ отличить два - это faq. – Nickolay

+0

Я продолжу исследовать это самостоятельно, как и я, но я не вижу, как это может быть проблемой. Я пробовал каждый зарегистрированный URL. Я понимаю, что один из них является «ложным» url - фреймом, но я не вижу, как ни один из них не может привлечь меня к поиску. –

+0

Вы проверили, что правильный URL-адрес не фильтруется вашим регулярным выражением? – Nickolay

ответ

0

Ну, на «правильной» странице http://www.google.com/#hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=1&cad=b, кажется, кадр с «неправильным» место нахождения: кадры [0] .Location == «http://www.google.com/search?hl=en&source=hp&q=hi&aq=f&aqi=&oq=&fp=1&cad=b». Вероятно, вы получаете местоположение внутреннего фрейма. Я понятия не имею, почему, поскольку вы не публиковали какой-либо из своих кодов и не упоминаете некоторые «dom.location», о которых я никогда не слышал.