Javascript 将本地.js文件插入网页?

Javascript 将本地.js文件插入网页?,javascript,html,code-injection,Javascript,Html,Code Injection,我想在一个网页中插入几个本地的.js文件。我只是指客户端,就像在我的浏览器中一样,我不需要任何人访问页面就能看到它。我只需要获取一个.js文件,然后使其看起来就像该文件一直通过标记包含在页面的html中一样 如果页面加载后需要一秒钟本地文件中的内容才可用,那也没关系 如果我必须在电脑前用控制台或其他东西“手动”完成这项工作,那也没关系 我已经尝试了两天,我尝试了Greasemonkey,我尝试了使用JavaScript控制台手动加载文件。让我惊讶的是,没有(显然)一个既定的方法来做这件事,这似乎

我想在一个网页中插入几个本地的.js文件。我只是指客户端,就像在我的浏览器中一样,我不需要任何人访问页面就能看到它。我只需要获取一个.js文件,然后使其看起来就像该文件一直通过
标记包含在页面的html中一样

如果页面加载后需要一秒钟本地文件中的内容才可用,那也没关系

如果我必须在电脑前用控制台或其他东西“手动”完成这项工作,那也没关系

我已经尝试了两天,我尝试了Greasemonkey,我尝试了使用JavaScript控制台手动加载文件。让我惊讶的是,没有(显然)一个既定的方法来做这件事,这似乎是一件非常简单的事情。不过,我想简单和普通不是一回事


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

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


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

由于您已经在使用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); 
    }
if(oSession.oResponse.headers.ExistsAndContains(“内容类型”、“html”)&&
oSession.hostname.Contains(“MY.TargetSite.com”)){
oSession.oResponse.headers.Add(“DEBUG1\u我们编辑了这个”,“这里”);
//删除任何压缩或分块
oSession.utilDecodeResponse();
var oBody=System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
//找到头脚本的结尾,这样就可以在那里插入脚本块。
var oRegEx=oRegEx=/()/gi
//将head-close标记替换为新脚本+head-close
oBody=oBody.replace(oRegEx,“console.log('我们注入了它');”);
//将响应主体设置为已更改的主体字符串
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); 
    }
if(oSession.oResponse.headers.ExistsAndContains(“内容类型”、“html”)&&
oSession.hostname.Contains(“html5rocks”){//goto html5rocks.com
oSession.oResponse.headers.Add(“DEBUG1\u我们编辑了这个”,“这里”);
oSession.utilDecodeResponse();
var oBody=System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
var oRegEx=oRegEx=/()/gi
oBody=oBody.replace(oRegEx,“警报(‘我们注入了它’)”);
oSession.utilSetResponseBody(oBody);
}
注意,您必须在fiddler:中关闭流媒体,我假设您需要解码HTTPS:


我越来越少地使用fiddler脚本,支持fiddler.Net扩展-

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


它会做你想做的

试试firefox的firebug插件。我已经安装了它——但是我该怎么处理它呢?创建一个脚本标记并通过JS控制台将其附加到DOM中似乎并不奏效。它被添加到dom中,并且文件内容被加载,但是如果我尝试访问其中声明的任何变量,我仍然会得到一个“未定义”的变量。这可以在特定于浏览器的扩展名中轻松实现。这难道不要求相关页面已经在使用jQuery吗?因为否则我就会陷入第22条陷阱——我需要jQuery来注入一个.js,我需要注入一个.js来使用jQuery。我应该提到我想到了这一点——不幸的是,它们不是html页面。它们是PHP,我无法复制服务器端处理,因为它涉及身份验证检查和数据库访问。这看起来非常有趣,不幸的是,我运行这个机器人的计算机现在正在运行Win2k(不要问),所以没有Chrome。在一个更好的世界里,你可能会得到公认的答案(谢谢,我是Fiddler的新手,甚至没有意识到它有这样的功能!这个解决方案有效,我的机器人现在支持elizabot.js。唯一的问题是Firefox拒绝运行本地的.js文件,所以我不得不将这些文件放在笔记本电脑的Apache服务器上,然后从那里通过我的局域网获取它们。谈谈kluge,但它是有效的。欢迎!顺便说一句,您可以这样做来读取一个文件并将整个文件注入脚本块:var lines=System.IO.file.ReadAllLines(“C:\\TMP\\TEST.JS”);var str=String.Join(“\n”,lines);oBody=oBody.replace(oRegEx,“alert(“+str+”)”);是的,今天下午我做了那个评论并实现了它之后,我意识到:)