12

我想将几个本地 .js 文件注入网页。我只是指客户端,就像在我的浏览器中一样,我不需要其他任何人访问该页面就能看到它。我只需要获取一个 .js 文件,然后制作它,就好像该文件一直通过<script>标签包含在页面的 html 中一样。

如果在页面加载后需要一秒钟以使本地文件中的内容可用,这没关系。

如果我必须在计算机上使用控制台或其他东西“手动”执行此操作,那也没关系。

这两天我一直在尝试这样做,我尝试过 Greasemonkey,我尝试过使用 JavaScript 控制台手动加载文件。令我惊讶的是,没有(显然)一种既定的方法可以做到这一点,这似乎是一件很简单的事情。不过,我想简单和普通不一样。

如果有帮助,我想这样做的原因是在基于 JS 的聊天客户端上运行聊天机器人。一些机器人的代码混合到预先存在的聊天代码中——为此,我让 Fiddler 拦截对 .../chat.js 的请求并将其替换为本地文件。但是我有两个 .js 文件,它们“独立于”页面本身的任何内容。页面请求的任何 .js 文件都没有我可以替换它们,所以我不能使用 Fiddler。

4

4 回答 4

4

由于您已经使用提琴手脚本,您可以在OnBeforeResponse(oSession: Session)函数中执行类似的操作

    if ( oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") &&
         oSession.hostname.Contains("MY.TargetSite.com") ) {

        oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE");

        // Remove any compression or chunking
        oSession.utilDecodeResponse();

        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);

        // Find the end of the HEAD script, so you can inject script block there.
        var oRegEx = oRegEx = /(<\/head>)/gi
        // replace the head-close tag with new-script + head-close 
        oBody = oBody.replace(oRegEx, "<script type='text/javascript'>console.log('We injected it');</script></head>");

        // Set the response body to the changed body string
        oSession.utilSetResponseBody(oBody); 
    }

www.html5rocks.com 的工作示例:

    if ( oSession.oResponse.headers.ExistsAndContains("Content-Type", "html") &&
         oSession.hostname.Contains("html5rocks") ) { //goto html5rocks.com
        oSession.oResponse.headers.Add("DEBUG1_WE_EDITED_THIS", "HERE");
        oSession.utilDecodeResponse();
        var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
        var oRegEx = oRegEx = /(<\/head>)/gi
        oBody = oBody.replace(oRegEx, "<script type='text/javascript'>alert('We injected it')</script></head>");
        oSession.utilSetResponseBody(oBody); 
    }

请注意,您必须在 fiddler 中关闭流式传输:http ://www.fiddler2.com/fiddler/help/streaming.asp ,我假设您需要解码 HTTPS:http ://www.fiddler2.com/fiddler/帮助/httpsdecryption.asp

我越来越少地使用提琴手脚本,支持提琴手 .Net 扩展 - http://fiddler2.com/fiddler/dev/IFiddlerExtension.asp

于 2012-04-28T18:26:51.207 回答
4

如果您使用的是 Chrome,请查看dotjs

它会做你想要的!

于 2012-04-28T19:10:22.730 回答
0

只使用 jquery 的 jQuery.getScript() 方法怎么样?

http://api.jquery.com/jQuery.getScript/

于 2012-04-28T18:00:36.487 回答
0

将普通的 html 页面保存到文件系统,手动添加 js 文件,然后使用 fiddler 拦截这些调用,以便获得您的 html 文件版本

于 2012-04-28T18:01:05.577 回答