将本地.js文件注入网页?

时间:2012-04-28 17:56:44

标签: javascript html code-injection

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

如果页面加载后本地文件中的内容可用,则可以使用一秒钟。

如果我必须在电脑上“手动”使用控制台或其他东西,这是可以的。

我一直试图这样做两天,我尝试过Greasemonkey,我尝试使用JavaScript控制台手动加载文件。让我感到惊讶的是,没有(显然)已有的方法可以做到这一点,这似乎是一件非常简单的事情。不过,我认为简单与普通不同。

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

4 个答案:

答案 0 :(得分:4)

由于你已经使用了fiddler脚本,你可以在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/help/httpsdecryption.asp

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

答案 1 :(得分:4)

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

它会完全符合您的要求!

答案 2 :(得分:0)

如何使用jquery的jQuery.getScript()方法?

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

答案 3 :(得分:0)

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