Origional post here. My version of the fiddler CustomRules.js file below.
import System;
import System.Windows.Forms;
import Fiddler;
// INTRODUCTION
// This is the FiddlerScript Rules file, which creates some of the menu commands and
// other features of Fiddler. You can edit this file to modify or add new commands.
//
// The original version of this file is named SampleRules.js and it is in the
// \Program Files\Fiddler\ folder. When Fiddler first starts, it creates a copy named
// CustomRules.js inside your \Documents\Fiddler2\Scripts folder. If you make a
// mistake in editing this file, simply delete the CustomRules.js file and restart
// Fiddler. A fresh copy of the default rules will be created from the original
// sample rules file.
// GLOBALIZATION NOTE:
// Be sure to save this file with UTF-8 Encoding if using any non-ASCII characters
// in strings, etc.
// JScript Reference
// http://www.fiddler2.com/redir/?id=msdnjsnet
//
// FiddlerScript Reference
// http://www.fiddler2.com/redir/?id=fiddlerscriptcookbook
//
// FiddlerScript Editor:
// http://www.fiddler2.com/redir/?id=fiddlerscripteditor
class Handlers
{
static function OnBeforeResponse(oSession: Session) {
// Snippet 1: Place this inside the "OnBeforeResponse" handler in your FiddlerScript
InjectInspectorScript(oSession);
}
// Snippet 2: Place this near the end of your FiddlerScript (within the Handlers class)
public static RulesOption("Use Compat Inspector")
var m_UseCompatInspector: boolean = false;
static function InjectInspectorScript(oSession: Session)
{
if(!m_UseCompatInspector) return;
// Ensure we only inject into HTML
if (oSession.url.EndsWith(".js")) return;
if (oSession.url.EndsWith(".css")) return;
if (!oSession.oResponse.MIMEType.Contains("text/html")) return;
// Retrieve the response body
var sBody = oSession.GetResponseBodyAsString();
// One final check to ensure the content looks like HTML
if (!/^\uFEFF?\s*</.exec(sBody)) return;
// Prepare to inject
var pos = 0; // Initial position is start of document
// Locate important elements in the page
var doctype = sBody.IndexOf("<!doctype", StringComparison.OrdinalIgnoreCase);
var meta = sBody.IndexOf("X-UA-Compatible", StringComparison.OrdinalIgnoreCase);
var script = sBody.IndexOf("<script", StringComparison.OrdinalIgnoreCase);
// Place after doctype (if present)
if (doctype != -1) doctype = sBody.IndexOf(">", doctype + 1);
if (doctype != -1 && doctype != sBody.Length - 1) pos = doctype + 1;
// Place after first X-UA-Compatible meta tag (if present)
if (meta != -1) meta = sBody.IndexOf(">", meta + 1);
if (meta != -1 && meta != sBody.Length - 1) pos = meta + 1;
// Place before any script tags that occur before the current position (if present)
if (script != -1 && script < pos) pos = script;
// Perform the injection at the detected location
oSession.utilSetResponseBody(
sBody.Insert(pos, "<script src='http://ie.microsoft.com/testdrive/HTML5/CompatInspector/inspector.js'></script>")
);
}
}