Как я могу одурачить сайт, который смотрит на 'навигатора' объекта JavaScript, чтобы видеть, что я не нахожусь в Windows?

Я пытаюсь просмотреть веб-сайт, однако, он только работает в соответствии с Windows и Mac, потому что они используют navigator.platform от JavaScript для обнаружения архитектуры я работаю. Конечно, они также используют агент пользователя браузера, но это было легко имитировать.

Вот .js рассматриваемое: http://pastebin.com/f56fd608d. Код, ответственный за определение браузера, наверху. Есть ли какой-либо способ изменить .js файл перед выполнениями сайта или чем-то подобным, таким образом, я могу устранить проверку?

Используя урожаи консоли JavaScript:

>navigator.platform
Linux i686

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

Возможно, кто-то знает, как изменить значение, возвращенное navigator.platform, потому что я очень не хочу запустить Windows под VirtualBox для использования этого сайта.

Править: Это могло представлять интерес, потому что пользователи Linux могли бы быть искусственно запрещены доступа к веб-сайтам, и ничего не могут делать с этим.

17
задан Kevin Fegan 5 November 2015 в 04:13
поделиться

5 ответов

Я предпочитаю использовать текст в стиле гиперссылки, переопределяя код чертежа и обрабатывая события перемещения/щелчка мыши, так как кнопки не слишком хорошо масштабируются до обычной высоты строки сетки. Однако, если кнопка действительно является нужной, необходимо иметь возможность сделать это с помощью RepositureItemButureEdit в качестве типа редактора.

Если вы заинтересованы в первом, оставьте комментарий, и я дополню его примером. В противном случае, как уже упоминалось, просто используйте RepositureItemButureEdit . При необходимости можно изменить его свойства, чтобы занять всю ячейку, а затем сделать столбец фиксированного размера, чтобы кнопка не растягивалась.


ОБНОВЛЕНИЕ: Я размещаю образец кода для «довольно гиперссылки» ниже, который мне нравится намного лучше, чем стандартная ячейка гиперссылки, потому что (а) он выглядит лучше, (б) он дает обратную связь и (c) вы можете изменить курсор, если хотите (я использую служебный метод, чтобы получить курсор из ОС, который имеет более 3D вид, чем встроенная рука Winforms).

Примечание для пользователей не DevExpress, читающих следующее: Я использую почти идентичный метод для стандартного System.Windows.Forms.ListView . Microsoft использует этот пользовательский интерфейс довольно образец в Vista и Windows 7 и полезно научиться делать, даже если результат не идеальная реплика.

private int hoverRowHandle = GridControl.InvalidRowHandle;

private void gridView_Click(object sender, EventArgs e)
{
    if (hoverRowHandle != GridControl.InvalidRowHandle)
    {
        MyItem item = gridView.GetRow(hoverRowHandle) as MyItem;
        if (item != null)
            // Do whatever the "click" action is here
    }
}

private void gridView_CustomDrawCell(object sender,
    RowCellCustomDrawEventArgs e)
{
    if (e.Column == linkColumn)
    {
        bool hover = (hoverRowHandle == e.RowHandle);
        FontStyle style = hover ? FontStyle.Underline : FontStyle.Regular;
        TextFormatFlags formatFlags =
            TextFormatFlags.Left | TextFormatFlags.VerticalCenter |
            TextFormatFlags.WordEllipsis;
        Color foreColor = gridView.IsRowSelected(e.RowHandle) ?
            Color.White : (hover ? MyColors.LinkHover : MyColors.Link);
        using (Font font = new Font(gridControl.Font, style))
        {
            TextRenderer.DrawText(e.Graphics, "Link Text", font, e.Bounds,
                foreColor, formatFlags);
        }
        e.Handled = true;
    }
}

private void gridView_MouseLeave(object sender, EventArgs e)
{
    int tempRowHandle = hoverRowHandle;
    hoverRowHandle = GridControl.InvalidRowHandle;
    if (tempRowHandle != GridControl.InvalidRowHandle)
    {
        gridView.InvalidateRowCell(tempRowHandle, linkColumn);
    }
}

private void gridView_MouseMove(object sender, MouseEventArgs e)
{
    int tempRowHandle = hoverRowHandle;
    if (tempRowHandle != GridControl.InvalidRowHandle)
    {
        hoverRowHandle = GridControl.InvalidRowHandle;
        gridView.InvalidateRowCell(tempRowHandle, linkColumn);
    }
    GridHitInfo hitInfo = gridView.CalcHitInfo(e.Location);
    if (hitInfo.InRowCell && (hitInfo.Column == linkColumn))
    {
        hoverRowHandle = hitInfo.RowHandle;
        gridView.InvalidateRowCell(hoverRowHandle, linkColumn);
    }

    bool hoverDetail = (hoverRowHandle != GridControl.InvalidRowHandle);
    gridControl.Cursor = hoverDetail ? Cursors.Hand : Cursors.Default;
}

Несколько примечаний об этом коде:

  • MyItem - это любой тип данных, привязанных к представлению сетки. Возможно, это DataRow или какой-то пользовательский тип, если источником данных является IList < T > .

  • MyColors - это класс утилит, который определяет пару открытых статических полей Color , используемых только для чтения для содержимого пользовательского интерфейса. Вы можете заменить ссылки на это жестко закодированными цветами, если вы собираетесь делать это только на одной сетке.

  • Я не утруждаю себя кэшированием Font , хотя вы, вероятно, могли бы, так как их только два.

  • Логика курсора будет мешать любой другой логике курсора, которую вы можете использовать в сетке (которая практически отсутствует почти в каждом случае для меня, так что, как правило, вы должны быть в порядке).

  • Если требуется иметь более одного «столбца ссылки», в дополнение к hoverRowHandle необходимо сохранить поле состояния hoverColumn и, очевидно, изменить эти сравнения равенства для одного столбца для поиска нескольких столбцов.

Для собственных приложений Winforms у меня на самом деле есть поставщик Extender, который позволяет мне присоединить это поведение к GridView или ListView путем вбрасывания в список пар «имя столбца/текст ссылки», но этот код является слишком длинным для публикации. Приведенный выше пример должен помочь вам начать работу.

-121--4132625-

Так как непосредственно установить navigator.platform невозможно, придется подкрадываться - создать объект, который ведет себя как navigator , заменить его platform , затем установить для него navigator .

var fake_navigator = {};

for (var i in navigator) {
  fake_navigator[i] =  navigator[i];
}

fake_navigator.platform = 'MyOS';

navigator = fake_navigator;

Если этот код выполняется перед загрузкой документа (с помощью GreaseMonkey, аддона или расширения Chrome), то на странице появится navigator.platform как «MyOS» .

Примечание: протестировано только в Chrome.

15
ответ дан 30 November 2019 в 11:32
поделиться

Для браузера на основе Mozilla Greasespot / Fraphets Napets # Hookjaning Свойства браузера демонстрируют, как это может быть сделано. Этот код может быть введен в Greaseminkey скрипта.

3
ответ дан 30 November 2019 в 11:32
поделиться

Попытка изменить это свойство (в любое время) в выходных данных Firefox:

Ошибка: Установка свойства, имеющего только Getter

Исходный файл: index.html

Линия: 1

Так что я думаю, что у вас будет трудное время.

Я бы попытался связаться с автором о получении исправления.

-1
ответ дан 30 November 2019 в 11:32
поделиться
var fakePlatformGetter = function () {
  return "your fake platform";
};
if (Object.defineProperty) {
  Object.defineProperty(navigator, "platform", {
    get: fakePlatformGetter
  });
} else if (Object.prototype.__defineGetter__) {
  navigator.__defineGetter__("platform", fakePlatformGetter);
}
17
ответ дан 30 November 2019 в 11:32
поделиться

about:config - > general.platform.override

4
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: