当前位置:  开发笔记 > 编程语言 > 正文

如何"静静地"从Greasemonkey脚本重新加载页面?

如何解决《如何"静静地"从Greasemonkey脚本重新加载页面?》经验,为你挑选了1个好方法。

我想重新加载页面,以便它不会导致整页刷新的效果,例如在页面选项卡上显示"正在加载...".

这是我到目前为止的代码.我的理论是,我可以body使用已更新网站的包装版本覆盖该部分,获得通过GM_xmlhttpRequest.

reloader.js

setInterval(reload, 10000);

function reload() {
    GM_xmlhttpRequest({method: 'GET',
            url: location.href,
            onload: function(responseDetails) {
                document.body.innerHTML =
                                '\n'
                                + responseDetails.responseText
                                + '\n';
            }});
}

在stackoverflow.com上使用Firebug进行测试时,我发现此脚本更新了body ,就像我执行了整页刷新一样,没有副作用.好极了!神秘的是,这些标签无处可寻.

问题

我现在所做的就是重新加载页面,但我有两个问题:

    重新加载后如何保持登录状态?具体来说,我需要做些什么才能让我登录Stack Overflow?

    有人能解释为什么我的脚本有效吗?为什么里面没有标签body

更新

到目前为止,我已经收集了Cleiton,Havenard和Henrik的答案中的元素.我尝试通过发送header: { 'Cookie': document.cookie }的数据中的条目发送cookie GM_xmlhttpRequest.这发送了一些但不是所有的cookie.事实证明,如果我打开的Firefox的第三方Cookie,然后我会得到必要的额外的饼干(.ASPXAUTH,ASP.NET_SessionId,和user),但是这是一个坏主意.



1> Havenard..:
document.body.innerHTML =
        responseDetails.responseText.match(/([\s\S]*)<\/body>/i)[1];

更新:对于具有属性的:

document.body.innerHTML =
        responseDetails.responseText.match(/]*>([\s\S]*)<\/body>/i)[1];

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有