javascript - 如何使用GreaseMonkey关闭定时弹出的窗口?

查看:146
本文介绍了javascript - 如何使用GreaseMonkey关闭定时弹出的窗口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在某网站观看视频时,每隔一段时间会弹出一个问题,回答后才能继续观看,希望可以使用GreaseMonkey自动回答弹出的问题。
弹窗使用jQuery1.4.4的dialog弹出,弹出后可以使用下面的代码选择正确的答案。

document.querySelector('[qs=True]').click()
document.querySelector('#but_Question').click()

尝试使用

// ==UserScript==
// @name        test_auto_close_dialog
// @namespace 
// @include     http://zjxy.ghlearning.com/Study/Learning/MediaLi?sscId=8f658a796db74a3ea9dde99e5a571534&medId=e4975f7a1a4e42768902bf35af23868c
// @version     1
// @grant       none
// ==/UserScript==

$('.ui_main').bind('dialogopen',function(event){
   document.querySelector('[qs=True]').click();
  document.querySelector('#but_Question').click();
})

绑定弹出事件,但是没有取得预期的效果。请问是否有办法写一个脚本,以自动回答问题?


其中关于播放器的代码如下:

var LiPlayerPlayState = {};
LiPlayerPlayState.Stopped = 1;
LiPlayerPlayState.Paused = 2;
LiPlayerPlayState.Playing = 3;
LiPlayerPlayState.Ended = 8;
LiPlayerPlayState.Ready = 10;
LiPlayerPlayState.Reconnecting = 11;
var playerVideo = null;

var LiPlayer = function (containerId, _config) {
    //针对800里流媒体播放学习
    this.containerId = containerId;

    this.config = {
        onLoad: function () { },
        onStoped: function () { },
        onPaused: function () { },
        onPlay: function () { },
        onBuffering: function () { },
        onBuffered: function () { },
        onPositionChange: function (o, n) { },
        onEnded: function () { },
        onLoadError: function (message) { },
        onLoadOverPlay: function () { },
        width: "100%",
        height: "100%",
        resPath: "",
        playerURL: "",
        playSite: "",
        playQuery: ""
    };

    $.extend(this.config, _config);
    if (this.config.width != "100%") {
        this.config.width += "px";
    }
    if (this.config.height != "100%") {
        this.config.height += "px";
    }

    p2psr_embed("auto", "vod", this.config.playSite, this.config.playQuery, "p2ps_video", this.config.width, this.config.height, "10.1.0",
        this.config.resPath + '/Files/expressInstall.swf', { auto_play: 1, no_light: 1, no_side_bar: 1, no_hide_skin: 1 }, { allowFullScreen: true, allowScriptAccess: "always", wmode: "transparent" }, {}, swfPlayerInit);
}


LiPlayer.prototype = {
    load: function (url) {
    },
    play: function () {
        playerVideo.resume();
    },
    pause: function () {
        playerVideo.pause();
    },
    isPlaying: function () {
        //getState(): 获取当前播放器的状态,"not_ready", "not_open", "playing", "pause", "end"
        var state = playerVideo.getState();
        if (state == "playing") {
            return true;
        }
        else {
            return false;
        }
    },
    currentPosition: function () {
        //获取当前播放时间, 单位秒
        var vTime = playerVideo.getTime();
        return Math.floor(vTime);
    },
    setSeek: function (position) {
        //定位视频, t 为小数,单位为秒。        
        playerVideo.seek(position);
    },
    duration: function () {
        //获取当前视频的长度,单位秒
        playerVideo.getDuration();
    },
    getCurrentTime: function () {
        return playerVideo.getTime();
    },
    getState: function () {
        //getState(): 获取当前播放器的状态,"not_ready", "not_open", "playing", "pause", "end"
        try {
            var state = playerVideo.getState();
            switch (state) {
                case "not_ready":
                    return LiPlayerPlayState.Reconnecting;
                    break;
                case "not_open":
                    return LiPlayerPlayState.Reconnecting;
                    break;
                case "playing":
                    return LiPlayerPlayState.Playing;
                    break;
                case "pause":
                    return LiPlayerPlayState.Paused;
                    break;
                case "end":
                    return LiPlayerPlayState.Ended;
                    break;
            }
        } catch (e) {
            return -1;
        }
    },
    close: function () {
        playerVideo.close();
    }
};


var timeState = null;
var timeStateIsPaused = false;
var timeStateIsRePlaying = false;
//启动定时器,监控播放状态
function startTimerState() {
    if (timeState == null) {
        timeState = setInterval(timerStateCallback, 500);
    }
}

//转换播放状态码
function getStateCode() {
    try {
        var state = this.playerVideo.getState();
        switch (state) {
            case "not_ready":
                return LiPlayerPlayState.Reconnecting;
                break;
            case "not_open":
                return LiPlayerPlayState.Reconnecting;
                break;
            case "playing":
                return LiPlayerPlayState.Playing;
                break;
            case "pause":
                return LiPlayerPlayState.Paused;
                break;
            case "end":
                return LiPlayerPlayState.Ended;
                break;
        }
    } catch (e) {
        return -1;
    }

}

function timerStateCallback() {
    var state = getStateCode();
    switch (state) {
        case 2:
            //播放状态暂停时,停止计时
            if (!timeStateIsPaused) {
                this.player.config.onPaused();
                timeStateIsPaused = true;
                //设置允许开始继续播放
                timeStateIsRePlaying = true;
            }
            break;
        case 3:
            //在暂停后重新允许重新开始播放时,回调计时提交
            if (timeStateIsRePlaying) {
                timeStateIsRePlaying = false;
                this.player.config.onRePlay();
            }

            //播放状态时,启动计时
            this.player.config.onPlay();
            timeStateIsPaused = false;

            break;
    }
}

/**
* 播放器初始化回调函数,只调用一次
* @param obj{object} 回调对象{Object {success: boolean, id: string, ref: object#p2ps_video}
* @param swfPlayer{object} swfPlayer对象
*/
function swfPlayerInit(playerObj) {
    //this.playerVideo = playerObj.ref;
    this.playerVideo = document.getElementById(playerObj.id);
    //设置监听事件
    this.playerVideo.setEventListener("playerEventListener");
    this.player.config.onLoadOverPlay();
    startTimerState();
}

/**
* 监听播放状态
* @param event {object} 事件对象
*/
function playerEventListener(event) {
    //判断触发事件的状态,1、play(播放) 2、pause(暂停) 3、seek(跳转) 4、end(结束) 5、close(关闭流)
    var playState;
    if (event.type === "eventPlayResume" || event.type === "eventPlayStart") {
        playState = "play";
    }
    else if (event.type === "eventPlaySeek") {
        //如果是跳跃播放
        playState = "seek";
    }
    else if (event.type === "eventPlayPause") {
        //如果是暂停状态
        playState = "pause";
    }
    else if (event.type === "eventStreamEnd") {
        //如果是播放完成状态
        playState = "end";
    }
    else if (event.type === "eventPlayClose") {
        //如果是关闭流
        playState = "close";
    }
    if (window.console)
        window.console.log("event.type:" + event.type);

    //执行播放绑定事件
    toggleEvent(playState, window.player.config);
}

function toggleEvent(state, config) {
    switch (state) {
        case "seek":
            config.onPositionChange();
            break;
        case "end":
            config.onEnded();
            break;
    }
}

解决方案

自己解决了
只需要定时完成一系列操作就行

    setInterval(function(){
      try{
         document.querySelector('[qs=True]').click();
         document.querySelector('#but_Question').click();
      }
      catch(e){
        if (window.console){
          window.console.log("Error in this userscript");
        }
      }
    }, 100000);

这篇关于javascript - 如何使用GreaseMonkey关闭定时弹出的窗口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆