Greasy Fork

来自缓存

Greasy Fork is available in English.

框架网页全屏

iframe网页全屏

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         框架网页全屏
// @namespace    iframeWebFull.xinggsf
// @version      0.2
// @description  iframe网页全屏
// @author       xinggsf
// @include      https://www.imeiju.pro/Play/*
// @include      https://www.imeiju.pro/new/Play/*
// @include      http://www.hanjutvaa.com/player/*
// @include      https://www.hanjutvaa.com/player/*
// @include      *olevod.com/index.php/vod/play/id/*
// @include      *olevod.tv/index.php/vod/play/id/*
// @noframes
// @run-at       document-body
// @grant        GM_addStyle
// ==/UserScript==

(function(doc, by) {
'use strict';
const q = (css, p = doc) => p.querySelector(css);
const goNextMV = () => {
	const s = location.pathname;
	const m = s.match(/(\d+)(\D*)$/);
	const d = +m[1] + 1;
	location.assign(s.slice(0, m.index) + d + m[2]);
};
const getMainDomain = host => {
	const a = host.split('.');
	let i = a.length - 2;
	if (/^(com?|cc|tv|net|org|gov|edu)$/.test(a[i])) i--;
	return a[i];
};
const u = getMainDomain(location.hostname);
const doClick = e => {
	if (typeof e === 'string') e = q(e);
	if (e) { e.click ? e.click() : e.dispatchEvent(new MouseEvent('click')) };
};

class FullPage {
	constructor(frm, onSwitch = null) {
		this._onSwitch = onSwitch;
		this.frame = frm;
		GM_addStyle(
			`.gm-fp-body .gm-fp-zTop {
				position: relative !important;
				z-index: 2147483647 !important;
			}
			.gm-fp-wrapper, .gm-fp-body{ overflow:hidden !important; }
			.gm-fp-wrapper {
				display: block !important;
				position: fixed !important;
				width: 100% !important;
				height: 100% !important;
				top: 0 !important;
				left: 0 !important;
				background: #000 !important;
				z-index: 2147483647 !important;
			}`
		);
	}
	static isFull() {
		return by.classList.contains('gm-fp-body');
	}
	toggle() {
		this._onSwitch?.(this);
		by.classList.toggle('gm-fp-body');
		this.frame.classList.toggle('gm-fp-wrapper');
		let e = this.frame.parentNode;
		while (e != by) {
			e.classList.toggle('gm-fp-zTop');
			e = e.parentNode;
		}
	}
}

const config = {
	hanjutvaa: {
		nextCSS: 'a.playLink.active + a',
		origin: 'https://ww4.hanjutvaa.com:443' //必须带端口号
	},
	olevod: {
		nextCSS: 'i.next-p'
	}
};
// const origin = config[u]?.origin || '/';

let ffp, mvWin, topFrame;
window.addEventListener("message", ev => {
	if (!ev.source || !ev.data?.id) return;
	switch (ev.data.id) {
	case 'gm-h5-init-MVframe':
		mvWin = ev.source;
		topFrame = [...doc.getElementsByTagName('iframe')]
			.find(e => e.allowfullscreen || e.offsetWidth > 99);
		ffp = new FullPage(topFrame);
		break;
	case 'gm-h5-toggle-iframeWebFull':
		ffp.toggle();
		break;
	case 'gm-h5-is-iframeWebFull': //响应子框架的ESC按键
		FullPage.isFull() && ffp.toggle();
		break;
	case 'gm-h5-play-next':
		config[u]?.nextCSS ? doClick(config[u].nextCSS) : goNextMV();
	}
}, false);

by.addEventListener('keydown', ev => {
	if (!ffp) return;
	switch (ev.keyCode) {
	case 78: // N 下一集
		config[u]?.nextCSS ? doClick(config[u].nextCSS) : goNextMV();
		break;
	case 13: //回车键。 全屏
		if (ev.shiftKey) {
			ffp.toggle();
		} else {
			mvWin.postMessage({id: 'gm-h5-toggle-fullScreen'}, '*');
		}
		break;
	case 27: //esc
		if (doc.fullscreen) {
			mvWin.postMessage({id: 'gm-h5-toggle-fullScreen'}, '*');
		} else if (FullPage.isFull()) {
			ffp.toggle();
		}
	}
});

})(document, document.body);