我想重新加载页面,这样就不会导致整页刷新的效果,比如在页面选项卡上显示“正在加载...”。
这是我到目前为止的代码。我的理论是,我可以使用body
包装的更新网站版本覆盖<frame>
部分,通过GM_xmlhttpRequest
获取。
setInterval(reload, 10000);
function reload() {
GM_xmlhttpRequest({method: 'GET',
url: location.href,
onload: function(responseDetails) {
document.body.innerHTML =
'<frame>\n'
+ responseDetails.responseText
+ '</frame>\n';
}});
}
在stackoverflow.com上使用Firebug进行测试时,我发现此脚本更新了body
,就像我执行了整页刷新一样,没有副作用。好极了!神秘的是,<frame>
标签无处可寻。
我现在所做的就是重新加载页面,但我有两个问题:
<frame>
中没有body
个标签?到目前为止,我已经收集了Cleiton,Havenard和Henrik的答案中的元素。我尝试通过header: { 'Cookie': document.cookie }
发送的数据中的GM_xmlhttpRequest
条目发送Cookie。这发送了一些但不是所有的cookie。事实证明,如果我在Firefox中启用第三方cookie,那么我将获得必要的额外cookie(.ASPXAUTH
,ASP.NET_SessionId
和user
),但这是{{{ 3}}
答案 0 :(得分:10)
document.body.innerHTML =
responseDetails.responseText.match(/<body>([\s\S]*)<\/body>/i)[1];
更新:对于&lt; body&gt;具有属性:
document.body.innerHTML =
responseDetails.responseText.match(/<body[^>]*>([\s\S]*)<\/body>/i)[1];
答案 1 :(得分:3)
@Andrew Keeton,
首先在您的计算机上安装fiddler,然后查看GM_xmlhttpRequest发出的http请求是否与所有 Cookie一起发送。如果没有去约:config选项“network.cookie.cookieBehavior”并将其设置为0,请做另一个测试。如果有效。你会遇到麻烦,因为没有一种安全的方法可以使用greasemonkey来执行这个改变,你将不得不使用@Henrik技巧。
答案 2 :(得分:1)
至于登录状态,我希望通过某种形式的会话cookie来跟踪它。确保在GM_xmlhttpRequest标头中明确设置它们,因为它本身不会这样做。
现在不确定确切的语法,但它应该是这样的:
GM_xmlhttpRequest({method: 'GET',
url: location.href,
headers: {'Cookie': document.cookie},
onload: function(responseDetails) { ...
答案 3 :(得分:0)
您要为此尝试使用哪些网站/网站?
根据您的需要,如果可能更容易/更好地更改他们给您的cookie的超时,您可以自己设置到期,永远:)