javascript - 将本地 .js 文件注入(inject)网页?

标签 javascript html code-injection

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

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

如果我必须在电脑前用控制台或其他东西“手动”执行此操作,那也没关系。

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

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

最佳答案

因为您已经在使用 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 扩展 - http://fiddler2.com/fiddler/dev/IFiddlerExtension.asp

关于javascript - 将本地 .js 文件注入(inject)网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366084/

相关文章:

javascript - 动态创建多个组

python - 从一个变量中生成两列?

html - 如何修复 IE 7 中未出现的 UI 元素?

html - 如何防止一个元素插入 CSS 中的另一个元素?

来自用作 PHP 数组键值的 HTTP GET 数据的 PHP 注入(inject)

security - 如果从外部来源获取字符串以外的其他数据类型是否可能有害?

javascript - 对 d3 堆积条形图的数据进行排序

javascript - Google API 示例未加载

javascript - 如何在 Canvas 上绘制多个数组实体

javascript - 正则表达式空白字符可以导致注入(inject)吗?