Javascript 为什么在注入脚本或替换单词时Gmail不加载?

Javascript 为什么在注入脚本或替换单词时Gmail不加载?,javascript,proxy,fiddler,javascript-injection,Javascript,Proxy,Fiddler,Javascript Injection,我用fiddler核心代理做了一些脚本注入。我注意到gmail在登录进度条前后移动了一段时间后登录失败。下面给出了一个使用c#的示例,该示例使用google chrome作为浏览器进行测试。下面的代码位于fiddler代理的beforeresponse事件中,操作系统是HTTP会话 oS.utilDecodeResponse(); oS.utilReplaceInResponse("</body>", "<script type='text/javascript'>

我用fiddler核心代理做了一些脚本注入。我注意到gmail在登录进度条前后移动了一段时间后登录失败。下面给出了一个使用c#的示例,该示例使用google chrome作为浏览器进行测试。下面的代码位于fiddler代理的beforeresponse事件中,操作系统是HTTP会话

  oS.utilDecodeResponse();
  oS.utilReplaceInResponse("</body>", "<script type='text/javascript'>var a = 10;</script></body>");
oS.utilDecodeResponse();
oS.utilReplaceInResponse(“,“var a=10;”);
已更新

正如Eric所建议的,我确保脚本不会与任何其他java脚本变量发生冲突。仅在gmail登录时在预期页面中添加脚本。然而,问题仍然存在

                if (oS.oRequest.headers.HTTPMethod == "GET" || oS.oRequest.headers.HTTPMethod == "POST")
                {  //exclude other HTTP Status codes
                    if (oS.oResponse.headers.HTTPResponseStatus == "200 OK")
                    {
                        if (!oS.oRequest.headers.Exists("X-Requested-With"))
                        {
                            var accept = oS.oRequest.headers.FindAll("Accept");
                            if (accept[0].Value.Contains("text/html"))
                            {
                                if (oS.oResponse.MIMEType == "text/html")
                                {
                                    oS.utilDecodeResponse();



                                    string script = "alert("Hello");"
                                 //The main http request after gmail login has a response with a script closing tag before body closing, so I am replacing it with my script added.
                                  oS.utilReplaceOnceInResponse("</script></body>", script + "</script></body>", false));



                                }
                            }
                        }
                    }
                }
if(oS.oRequest.headers.HTTPMethod==“GET”| | oS.oRequest.headers.HTTPMethod==“POST”)
{//排除其他HTTP状态代码
如果(oS.oResponse.headers.HTTPResponseStatus==“200正常”)
{
如果(!oS.oRequest.headers.Exists(“X-Requested-With”))
{
var accept=oS.oRequest.headers.FindAll(“accept”);
if(接受[0].Value.Contains(“text/html”))
{
if(oS.oResponse.MIMEType==“text/html”)
{
oS.utilDecodeResponse();
string script=“警报(“你好”);”
//gmail登录后的主http请求在正文关闭之前有一个带有脚本关闭标记的响应,因此我将用添加的脚本替换它。
oS.utilReplaceOnceInResponse(“,script+”,false));
}
}
}
}
}

chrome可以很好地使用,但是在safari和opera中,alert会无限调用,以便HTTP请求重新加载页面。

问题是您的替换不够精确。您正在使用包含引号的字符串替换所有页面上的
的所有实例。但是,在某些情况下,您要替换的字符串出现在Google应用程序中的JavaScript字符串中,因此您正在损坏JavaScript字符串并导致脚本错误

使用下面的脚本示例更好地了解要替换的所有位置,然后更新脚本,以便更具体地仅替换预期页面上的预期字符串

    oSession.utilDecodeResponse();
    if (oSession.utilReplaceInResponse("</body>", '<!-- INJECTED --></body>'))
    {            
        oSession["ui-backcolor"] = "lime";
    }      
oSession.utilDecodeResponse();
if(oSession.utilReplaceInResponse(“,”))
{            
oSession[“ui背景色”]=“石灰”;
}      

我最初认为gmail正在进行某种反射或消息散列,以检查代码完整性并防止脚本注入。因为即使是oS.utilprependentresponsebody(“你好”);导致了同样的问题。谢谢,我想oS.utilReplaceOnceInResponse可以更好地避免在同一个会话中多次注入。问题仍然存在!我确保只在一个加载主要HTML内容的会话中注入脚本。很抱歉,这个问题在歌剧和狩猎中仍然存在。但是chrome和预期的一样好。我在这里没有任何问题。确保在每次实验之间清除缓存。谢谢,你是对的。我注意到我的脚本也被注入到gmail的另一个巨大javascript中,因为出于某种原因,javascript代码包含字符串。这引发了一个脚本错误,在gmail中,如果发生脚本错误,整个页面将由全局错误捕获语句重新加载。