Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中页面重新加载/刷新的操作_Javascript - Fatal编程技术网

JavaScript中页面重新加载/刷新的操作

JavaScript中页面重新加载/刷新的操作,javascript,Javascript,我想做的是在FireFox中的页面重新加载/刷新后,从扩展/GM脚本触发一个函数 想象一下: 我转到一个要求输入用户名和密码的网页 我的代码填充这些值并提交凭据 该网页会重新加载并弹出一个页面,要求我输入预先确定的号码 我输入号码 该网页会重新加载并弹出一个页面,要求我从下拉列表中选择一个选项 我选择。。。 .. 你明白了 我想我想写一些JavaScript来完成这一切。。由于需要持久性,而且我没有能力更改源站点,所以我考虑编写一个FireFox扩展或GreaseMonkey——基本上是客户端的

我想做的是在FireFox中的页面重新加载/刷新后,从扩展/GM脚本触发一个函数

想象一下:

  • 我转到一个要求输入用户名和密码的网页
  • 我的代码填充这些值并提交凭据
  • 该网页会重新加载并弹出一个页面,要求我输入预先确定的号码
  • 我输入号码
  • 该网页会重新加载并弹出一个页面,要求我从下拉列表中选择一个选项
  • 我选择。。。 .. 你明白了
  • 我想我想写一些JavaScript来完成这一切。。由于需要持久性,而且我没有能力更改源站点,所以我考虑编写一个FireFox扩展或GreaseMonkey——基本上是客户端的任何东西

    类似于DomContentReloated事件的行为(如果它存在的话):

    addEventListener(“DomContentReloated”,PageReloated,false)

    此类代码的典型测试用例为:

  • 了解页面刷新之间的间隔时间
  • 等待页面刷新的第二个实例发生,然后重定向到另一个页面 等

  • 所有这些都可以通过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);