Вход

Просмотр полной версии : Как с помощью расширения получить "правильную" ссылку?


ddos1
06.07.2015, 15:56
Недавно начал пробовать писать расширения для хрома и в процессе появляется много непонятного. Вот например:
С помощью расширения я хочу вывести в консоль ссылку которую мне выдал гугл-поиск. В поиск вбиваем любое слово например "мяч" и выводим в консоль первую ссылку результата поиска
вот код манифеста:
{
"name": "test",
"description": "test",
"version": "0.1",
"manifest_version": 2,

"content_scripts": [{
"matches": [ "https://*/*" ],
"js": ["jquery.js", "script.js"]
}]
}

а вот код файла "script.js":

$(document).ready( function(){
var val = $("h3.r:first").children("a").attr("href");
console.log(val)
});

Переменная val возвращает значение "_https://ru.wikipedia.org/wiki/%D0%9C%D1%8F%D1%87", а как мне получить ссылку такого типа (ее мы получаем когда на ссылке нажать правой кнопкой мыши и в контекстном меню выбрать "копировать адрес ссылки") "_https://www.google.com.ua/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=0CDEQFjAG&url=https%3A%2F%2Fru.wikipedia.org%2Fwiki%2F%25D0% 259C%25D1%258F%25D1%2587&ei=AHiaVYLuFOOfyAPEpYEg&usg=AFQjCNG1S886FzPJoRVjYVi8k3gMRYR-KA&sig2=M4k2huNZjbmrUouGQwtrlA&bvm=bv.96952980,d.bGQ"?

Aetae
06.07.2015, 17:48
ddos1, гугл подменяет ссылку по mousedown(это прекрасно видно в инспекторе), соответственно надо либо тригернуть это событие, либо напрямую использовать гугло-функцию rwt.
(кстати я у себя её юзерскриптом занулил давно, нафиг мне лишний лаг при переходах:))

$(document).ready( function(){
var a = $("h3.r:first").children("a")[0];
a.onmousedown();
console.log(a.href)
});

ddos1
06.07.2015, 20:06
Спасибо за разъяснение.
У меня выдает ошибку "Uncaught TypeError: a.onmousedown is not a function"? как это исправить?

Aetae
07.07.2015, 00:20
Возможно какието секурные ограничение песочница для расширений.

Попробуй так:
$(document).ready( function(){
var val = $("h3.r:first").children("a").trigger("mousedown").prop("href");
console.log(val)
});

Если не поможет - значит гугли доступ к функциям и событиям страницы из расширения.

kostyanet
07.07.2015, 05:22
Говорят что если гугля обильно осыпАть запросами, из него вылезет капча.

ddos1
07.07.2015, 09:40
Все равно выдает ошибку: "Uncaught TypeError: $(...).children(...).trigger(...).prop is not a function"
Я попробовал написать вместо
.prop("href")
так:
.attr("href")
после этого ошибка исчезла, но в консоль возвращается обычная ссылка.
И кстати, Aetae, расскажите по-подробнее как вы эту функцию (rwt) у себя занулили?

kostyanet
07.07.2015, 10:46
а как мне получить ссылку такого типа

Мы ее "получаем" всегда при щелчке в выдаче. Вам-то оно зачем? Вы же получили нормальную ссылку без редиректа.

Ну, варианты могут быть. Например выщелкать бабосы у конкурента, или типа подменить реф на свой, типа гугля не знает про такие финты ушами. Или зачем?

ddos1
07.07.2015, 21:27
Насколько я понял никак нельзя выполнить мою задумку из-за ограничений из расширения я никак не получу доступ к скрипту другого сайта.

Aetae
08.07.2015, 03:13
В firefox можно получить доступ к "небезопасному контенту" с помощью wrappedJSObject, погугли аналоги для chrome.
И кстати, Aetae, расскажите по-подробнее как вы эту функцию (rwt) у себя занулили?
Greasemonkey юзерскрипт. Нет ничго проще:):// ==UserScript==
// @name fuck google redirect
// @namespace all
// @include https://www.google.ru/*
// @include https://www.google.com/*
// @include https://google.ru/*
// @include https://google.com/*
// @version 1
// @grant none
// ==/UserScript==
window.onload = function(){
unsafeWindow.rwt = function(){}
};

ddos1
10.07.2015, 15:29
Aetae, у меня почему-то этот скрипт не работает( специально скачал и установил firefox и дополнение Greasemonkey, установил скрипт но гугл все равно редиректит

Aetae
10.07.2015, 22:26
Наверное из-за [url][/url] котрых в коде быть не должно, глючит форумный парсер дбавляя bb теги внутри блоков кода.

ddos1
13.07.2015, 15:45
Aetae, да так работает, спасибо.