JavaScript中页面重新加载/刷新的操作
我想做的是在FireFox中的页面重新加载/刷新后,从扩展/GM脚本触发一个函数 想象一下:JavaScript中页面重新加载/刷新的操作,javascript,Javascript,我想做的是在FireFox中的页面重新加载/刷新后,从扩展/GM脚本触发一个函数 想象一下: 我转到一个要求输入用户名和密码的网页 我的代码填充这些值并提交凭据 该网页会重新加载并弹出一个页面,要求我输入预先确定的号码 我输入号码 该网页会重新加载并弹出一个页面,要求我从下拉列表中选择一个选项 我选择。。。 .. 你明白了 我想我想写一些JavaScript来完成这一切。。由于需要持久性,而且我没有能力更改源站点,所以我考虑编写一个FireFox扩展或GreaseMonkey——基本上是客户端的
所有这些都可以通过FireFox扩展来完成(或者GreaseMonkey,以防在GM中使用slution更容易/更好/推荐)-考虑到这一点,事情应该很简单?我认为没有任何方法可以通过在浏览器中刷新页面来保存JavaScript-然后它会再次加载所有内容
也许你可以从
窗口开始。onbeforeunload
来重载重载按钮的默认功能,并使用AJAX来重载一些主分区。分配window.onbeforeunload将是一个可行的解决方案,如果在页面关闭时也没有触发它的话
还有什么建议吗。。可能是FF扩展或GM脚本特定?使用
窗口。名称或文档。cookie
-这两个属性都将在刷新页面后保留下来。我已更新了我的答案,以反映您下面更新的问题
如前所述,您可以使用onbeforeuload
事件在页面刷新时执行操作
下面是一个解决方案,可以解决一些潜在问题,我将在下面解释:
// Just some cookie utils from: http://www.quirksmode.org/js/cookies.html
var Cookie = {
create: function(name, value, days) {
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = "; expires=" + date.toGMTString();
}
else var expires = "";
document.cookie = name + "=" + value + expires + "; path=/";
},
read: function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) == 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null;
},
erase: function(name) {
createCookie(name, "", -1);
}
}
window.addEventListener('beforeunload', pageClosed, false);
window.addEventListener('load', pageOpened, false);
function pageOpened() {
var timestampString = Cookie.read('closeTester');
if (timestampString) {
var timestamp = new Date(timestampString);
var temp = new Date();
temp.setMinutes(temp.getMinutes() - 1, temp.getSeconds() - 30);
// If this is true, the load is a re-load/refresh
if (timestamp > temp) {
var counter = Cookie.read('counter');
if (counter) {
counter++;
Cookie.create('counter', counter);
} else {
Cookie.create('counter', 1);
}
}
Cookie.erase('closeTester');
}
}
function pageClosed() {
Cookie.create('closeTester', new Date());
}
将“window.addEventListener()
”调用替换为上面的两行,就得到了一个跨浏览器的实现。但是,由于您使用的是greasemonkey脚本,除非您想进行DOM操作,否则jQuery API就没有必要了,而jQuery非常擅长于DOM操作。919756
如果你成功了,TC工作人员会抓住并禁止你。不知道我怎么知道的?嗯…正确。。但这就是为什么我在第一行中添加了parens中的文本!之所以实现持久性,是因为所有这些都是通过一个始终处于活动状态的FireFox扩展实现的。。基本上,我是在问扩展是否有可能在FireFox中重新加载页面时发现/通知…+1回答很好-我还没有测试Javascript,但“PoorLuzer”(提问者)真的必须感谢你在这方面所做的工作。不过,你不能依赖beforeunload,浏览器通常都不支持它。如果使用jquery(或其他javascript API),那么您可以确保卸载发生。哇,Dan,跟踪命中率的代码非常酷!然而,这是我想做的事情的特点之一——而不是目标本身。。。它假设我写了所有这些发生的网站的HTML。。关于你的jQuesry建议。。你能告诉我从哪里开始吗?你将“重新加载”问题重新定义为“加载”解决方案的方式真的很好——最终结果是一样的,尽管后者需要cookies。但是没有办法拥有一些“OnReload”功能吗?甚至可能使用JS库?还是不明白这意味着什么!
$().ready(pageOpened);
$().unload(pageClosed);