Я пытаюсь просмотреть веб-сайт, однако, он только работает в соответствии с Windows и Mac, потому что они используют navigator.platform
от JavaScript для обнаружения архитектуры я работаю. Конечно, они также используют агент пользователя браузера, но это было легко имитировать.
Вот .js рассматриваемое: http://pastebin.com/f56fd608d. Код, ответственный за определение браузера, наверху. Есть ли какой-либо способ изменить .js файл перед выполнениями сайта или чем-то подобным, таким образом, я могу устранить проверку?
Используя урожаи консоли JavaScript:
>navigator.platform
Linux i686
Очевидно я изменил агент пользователя браузера, но navigator.platform
кажется, не берет, это - значение от агента пользователя.
Возможно, кто-то знает, как изменить значение, возвращенное navigator.platform
, потому что я очень не хочу запустить Windows под VirtualBox для использования этого сайта.
Править: Это могло представлять интерес, потому что пользователи Linux могли бы быть искусственно запрещены доступа к веб-сайтам, и ничего не могут делать с этим.
Я предпочитаю использовать текст в стиле гиперссылки, переопределяя код чертежа и обрабатывая события перемещения/щелчка мыши, так как кнопки не слишком хорошо масштабируются до обычной высоты строки сетки. Однако, если кнопка действительно является нужной, необходимо иметь возможность сделать это с помощью 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
путем вбрасывания в список пар «имя столбца/текст ссылки», но этот код является слишком длинным для публикации. Приведенный выше пример должен помочь вам начать работу.
Так как непосредственно установить 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.
Для браузера на основе Mozilla Greasespot / Fraphets Napets # Hookjaning Свойства браузера демонстрируют, как это может быть сделано. Этот код может быть введен в Greaseminkey скрипта.
Попытка изменить это свойство (в любое время) в выходных данных Firefox:
Ошибка: Установка свойства, имеющего только Getter
Исходный файл: index.html
Линия: 1
Так что я думаю, что у вас будет трудное время.
Я бы попытался связаться с автором о получении исправления.
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);
}