Javascript / Greasemonkey: поиск чего-то, а затем установить результат в качестве значения - PullRequest
0 голосов
/ 18 марта 2010

Хорошо, я немного N00B, когда дело доходит до JS (я не лучший программист), поэтому, пожалуйста, будьте осторожны - особенно если мои вопросы уже были заданы где-то, и я слишком глуп, чтобы найти правильный ответ. Самоуничижение с дороги, давайте перейдем к вопросу.

Проблема

Существует сайт, который я и большая группа друзей часто используем, на котором не отображается вся информация, которую мы хотели бы знать - в данном случае сайт бронирования авиабилетов и класс путешествий.

Хотя информация скрыта в коде страницы, она нигде не отображается пользователю.

Используя скрипт Greasemonkey, я хотел бы освободить эту информацию и отобразить ее в подходящем формате.

Вот псевдокод того, что я собираюсь сделать.

  • Поиск домена по указанному элементу
  • определить переменные
  • Найти строку текста
  • Если найден
    • Установить результат для переменной
    • Запись содержимого на страницу в определенном месте (до указанного div)
  • Если не найден
  • Ничего не делать

Я думаю, что я достиг большей части этого, за исключением ключевых битов:

Поиск строки: Страница должна искать следующий фрагмент текста на странице HEAD:

mileageRequest += "&CLASSES=S,S-S,S-S";

Содержимое, которое мне нужно извлечь и сохранить, находится между вторым знаком равенства (=) и последней запятой ("). Содержимое этой области может быть любой буквой между A-Z.

Мне не нужно разбивать его на массивы, чтобы я мог использовать элементы по отдельности на этом этапе.

  • Запись результата в определенное место. Возьмите найденный фрагмент текста и запишите его в другое место.

Код пока

Это то, что я до сих пор придумал, с подсвеченными пропущенными битами.

buttons = document.getElementById('buttons');
''Search goes here
var flightClasses = document.createElement("div");
flightClasses.innerHTML = '<div id="flightClasses"> ' +
        '<h2>Travel classes</h2>' +
        'For the above segments, your flight classes are as follows:' +
        'write result here' +
        '</div>';
main.parentNode.insertBefore(flightClasses, buttons);

Если бы кто-нибудь мог мне помочь или указать мне правильное направление, чтобы закончить это, я был бы признателен.

1 Ответ

1 голос
/ 19 марта 2010

Содержимое, которое мне нужно извлечь и сохранить, находится между вторым знаком равенства (=) и последней запятой (").

Вы имеете в виду "находится между вторым знаком равенства (=) и последней цитатой (") "?

И я предполагаю, что это:

mileageRequest += "&CLASSES=S,S-S,S-S";

есть в теге скрипта?

Если это так, то, похоже, на странице будет переменная JS с именем mileageRequest, к которой вы можете получить доступ из Greasemonkey с помощью unsafeWindow.mileageRequest и при условии, что вы можете получить доступ к нужным данным с помощью чего-то вроде:

// check that the mileageRequest variable exists
if(unsafeWindow.mileageRequest){
  // it exists
  var myString = unsafeWindow.mileageRequest.match(/&CLASSES=([^&=]*)/i);
  if(myString){
    // my string exists
    myString = myString[1];
  }
  else{
    // my sting does not exist
  }
}
else {
  // it does not exist
}

или вы можете попробовать:

var myString = document.getElementsByTagName('head')[0].innerHTML.match(/mileageRequest\s*\+=\s*"&CLASSES=([^"]*)";/i);
if(myString){
  // my string exists
  myString = myString[1];
}
else{
  // my string does not exist
}
...