我想将几个本地 .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/