Назад | Перейти на главную страницу

shExpMatch и Internet Explorer 6 в proxy.pac

Я пытаюсь настроить proxy.pac файл, который может использоваться для клиентов IE6. В основном это:

function FindProxyForURL(url, host) {
    if (shExpMatch(host, "*example.com*")) return "DIRECT";

    return "PROXY 1.2.3.4:8080";
}

Этот файл сообщает браузеру, что любой клиент пытается перейти на хост, соответствующий "*example.com*" следует использовать прямое соединение, в противном случае используйте прокси.

Это отлично работает практически в любом браузере, но IE6 никогда не соответствует shExpMatch что бы я ни старался. я прочел этот и отключил кеш, как описано Вот, но безрезультатно.

Я уверен, что IE6 поддерживает shExpMatch функция, но если кто-то захочет меня поправить, буду рад это услышать. Между прочим, это работает на WinXP SP2.

Я знаю, что вы уже решили это, но для тех, кто наткнется на это, в IE есть ограничение (по дизайну) для функции shExpMatch в файле PAC, в котором только * и? Поддерживаются подстановочные знаки регулярного выражения. Альтернативой является использование объекта регулярного выражения и вызов на нем тестового метода, передавая host или url в качестве параметра:

var regex = /*example.com*/;
if(regex.test(host))
    return "DIRECT";
return "PROXY 1.2.3.4:8080";

Вот слегка измененный WPAD.DAT, который я использую на сайте Заказчика. Он отлично работает в IE6, без изменений ... (потому что они не дадут мне разрешения на обновление до IE8). Единственные изменения, которые я внес, заключались в том, чтобы скрыть доменные имена Заказчика.

function FindProxyForURL(url, host) {

  if ( isPlainHostName(host) ) { return "DIRECT"; }

  if ( shExpMatch(url, "https:*") ) { return "DIRECT"; }

  if ( shExpMatch(url,"http://*.customer.domain.com")) { return "DIRECT"; }

  if ( isInNet(host,"127.0.0.1", "255.255.255.255") ) { return "DIRECT"; }

  if ( isInNet(host,"10.35.0.0", "255.255.0.0") ) { return "DIRECT"; }

  if ( isInNet(host,"192.168.0.0", "255.255.0.0") ) { return "DIRECT"; }

  return "PROXY proxy.customer.domain.com:8080";
}

Единственное различие, которое я вижу, заключается в том, что вы не соответствуете http: в начале, но это не имеет значения.

Вы не должны этого делать, но вы можете добавить операторы alert (), и IE6 будет их отображать. Таким образом вы сможете добиться некоторой поддержки при отладке.