在Firefox上加载页面之前和之后执行GM_xmlhttpRequest

时间:2014-07-19 00:28:53

标签: javascript linux firefox greasemonkey userscripts

我正在度假,我酒店的网络连接价格很疯狂。

网络流量被阻止,直到使用http post请求向http://an.internal.address/login发送有效的用户名/密码对。

但是,它们可以让用户通过访问http://an.internal.address/logout

来关闭连接

我希望通过使用Greasemonkey自动执行以下操作来最大化我的1小时网络票的持续时间:

  1. http发布数据“username = MY_USERNAME& password = MY_PASSWORD”至http://an.internal.address/login
  2. 使用我的浏览器加载页面
  3. http get http://an.internal.address/logout
  4. 我使用的是Firefox 30,我认为Greasemonkey实际上可以做到这一点。但是,我是第一次尝试编写用户脚本:它部分工作。

    似乎根本没有调用login(),并且logout不执行GM_xmlhttpRequest,因为没有发出包含响应的alert()。

    // ==UserScript==
    // @name        test
    // @namespace   leonixyz
    // @version     0.1
    // @description Calls shell script once a page has been loaded or leaved
    // @match       http://*/*
    // @match       https://*/*
    // @copyright   leonixyz
    // ==/UserScript==
    
    function login() {
        GM_xmlhttpRequest({
           method: "POST",
           url: "http://1.1.1.1/login",
           data: "username=DE14945&password=VBJEETYN&dst=&popup=true",
           onload: function(response) {
              alert(response.responseText);
           }
        });
    }
    
    function logout() {
        GM_xmlhttpRequest({
           method: "GET",
           url: "http://1.1.1.1/logout",
           onload: function(response) {
               alert(response.responseText);
           }
        });
    }
    
    window.addEventListener("unload", login);
    window.addEventListener("load", logout);
    

1 个答案:

答案 0 :(得分:0)

解决:所有GM_functions()都需要在@grant元标记之后声明到标题中。 如果您计划在克罗地亚波雷奇附近的Hotel Delfin酒店度假,请在接待处购买1小时的网络票,并享受以下脚本(有时您需要手动连接,特别是在打开新标签时,但断开连接是有效的并节省宝贵的连接时间):

// ==UserScript==
// @name        Laguna Wifi hack
// @namespace   leonixyz
// @version     0.1
// @description connect/disconnect automatically when browsing
// @match       http://*/*
// @match       https://*/*
// @exclude     http://1.1.1.1/*
// @copyright   leonixyz
// @grant       GM_xmlhttpRequest
// ==/UserScript==

function login() {
    GM_xmlhttpRequest({
       method: "POST",
       url: "http://1.1.1.1/login",
       data: "username=MY_USERNAME&password=MY_PASSOWRD"
    });
}

function logout() {
    GM_xmlhttpRequest({
       method: "GET",
       url: "http://1.1.1.1/logout"
    });
}

window.addEventListener("beforeunload", login);
window.addEventListener("load", logout);