PAC engine differences

The same proxy.pac can return different answers in Chrome, Firefox and pactester. This table puts the newest version of each engine side by side. Every cell says where the claim comes from.

Values describe the newest version range of each engine. Older ranges, for example Chrome 51 and older, which pass the full URL to the script, are listed on each engine page. code means read in the engine’s source code at a pinned commit, doc means vendor documentation, lab means observed in a lab run, and expert means practitioner knowledge that is not verified yet.

Test how your own file behaves in each engine with the online PAC file tester.

BehaviourChrome ≥ 52Firefoxpacparser ≥ 1.5.1
alert() outputnetlog
code, verified 2026-10-04
console
code, verified 2026-10-04
console
alert() is not defined before 1.5.1, so calling it throws.
code, verified 2026-10-04
Non-ASCII result rejectedtrue
code, verified 2026-10-04
false
The returned string is used as is; non-ASCII characters are not rejected.
code, verified 2026-10-04
false
code, verified 2026-10-04
DNS lookupsasync
Chrome resolves names asynchronously and may run the script again once the answer arrives; the checker answers from your DNS table.
expert, unverified
sync
code, verified 2026-10-04
sync
code, verified 2026-10-04
dnsResolve is IPv4 onlytrue
code, verified 2026-10-04
false
Whether dnsResolve can return IPv6 addresses in current Firefox has not been checked.
expert, unverified
true
code, verified 2026-10-04
JavaScript level acceptedlatest
code, verified 2026-10-04
latest
code, verified 2026-10-04
latest
SpiderMonkey 1.7 accepts ES3 syntax only; the checker approximates it with an ES3 parser.
doc, verified 2026-10-04
Calls FindProxyForURLEx if definedfalse
code, verified 2026-10-04
false
code, verified 2026-10-04
true
code, verified 2026-10-04
Microsoft *Ex functionstrue
code, verified 2026-10-04
false
code, verified 2026-10-04
true
doc, verified 2026-10-04
Global variables persist between callstrue
code, verified 2026-10-04
true
expert, unverified
true
code, verified 2026-10-04
Host lower-cased by the enginetrue
The host comes from the browser's canonicalised URL, so it is already lower-case.
expert, unverified
true
The host comes from the parsed request URL, which is lower-case.
expert, unverified
false
code, verified 2026-10-04
myIpAddress() sourcerouting_ipv4
expert, unverified
routing_ipv4
code, verified 2026-10-04
user_supplied
code, verified 2026-10-04
Native (C++) bindingsalert, myIpAddress, dnsResolve, isPlainHostName, dnsResolveEx, myIpAddressEx, sortIpAddressList, isInNetEx
Read from the current Chromium source; assumed to be the same in old versions.
code, verified 2026-10-04
dnsResolve, myIpAddress, alert
code, verified 2026-10-04
dnsResolve, myIpAddress, dnsResolveEx, myIpAddressEx, alert
code, verified 2026-10-04
On exceptiondirect
code, verified 2026-10-04
direct
If FindProxyForURL throws, the request goes DIRECT.
code, verified 2026-10-04
error
code, verified 2026-10-04
On non-string / undefined resultdirect
code, verified 2026-10-04
direct
A result that is not a string (for example a missing return) makes the request go DIRECT.
code, verified 2026-10-04
stringify
A missing return value becomes the string "undefined".
code, verified 2026-10-04
URL passed to FindProxyForURLhttps_path_query
For https:// and wss:// URLs the script sees only scheme, host and port; user name, password and fragment are always removed.
code, verified 2026-10-04
all_path_query
Firefox removes path and query for every scheme, not only https (preference network.proxy.autoconfig_url.include_path, default false).
code, verified 2026-10-04
none
code, verified 2026-10-04

Download as CSV (one row per engine and behaviour, with source and verification date).