MCPcopy Index your code
hub / github.com/hoothin/UserScripts / loadedHandler

Function loadedHandler

Pagetual/pagetual.user.js:12658–12748  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12656 }
12657 }, 500);
12658 let loadedHandler = async e => {
12659 if (e.data != 'pagetual-iframe:DOMLoaded' && e.type != 'load') return;
12660 clearInterval(checkRemoveIntv);
12661 window.removeEventListener('message', loadedHandler, false);
12662 iframe.removeEventListener('load', loadedHandler, false);
12663 let doc;
12664 try {
12665 doc = iframe.contentDocument || iframe.contentWindow.document;
12666 doc.hasFocus = () => true;
12667 } catch(e) {}
12668 let pageEleTryTimes = 0;
12669 async function checkIframe() {
12670 if (urlChanged || isPause) {
12671 return callback(false, false);
12672 }
12673 try {
12674 doc = doc || iframe.contentDocument || iframe.contentWindow.document;
12675 if (checkEval && !await checkEval(doc)) {
12676 setTimeout(() => {
12677 checkIframe();
12678 }, waitTime);
12679 return;
12680 } else {
12681 let preCode = ruleParser.curSiteRule.pagePre, eles = null;
12682 if (preCode) {
12683 try {
12684 let preResult;
12685 if (typeof preCode == 'function') {
12686 preResult = await preCode(doc.documentElement.innerHTML, doc);
12687 } else if (preCode.length == 2) {
12688 preResult = doc.documentElement.innerHTML.replace(new RegExp(preCode[0], "gi"), preCode[1]);
12689 } else {
12690 preResult = await new AsyncFunction("response", "doc", '"use strict";' + preCode)(doc.documentElement.innerHTML, doc);
12691 }
12692 if (typeof preResult !== "undefined") {
12693 if (typeof preResult === "string") {
12694 setHTML(doc.documentElement, preResult, doc);
12695 } else eles = preResult;
12696 }
12697 } catch(e) {
12698 debug(e);
12699 }
12700 }
12701 let base = doc.querySelector("base");
12702 ruleParser.basePath = (base && base.href) || url;
12703 if (eles === null) eles = ruleParser.getPageElement(doc, iframe.contentWindow, pageEleTryTimes < 25);
12704 if (eles && eles.length > 0) {
12705 await ruleParser.hookUrl(doc);
12706 await callback(doc, eles);
12707 } else if (pageEleTryTimes++ < 100) {
12708 getBody(doc).scrollTop = 9999999;
12709 if (doc.documentElement) {
12710 doc.documentElement.scrollTop = 9999999;
12711 }
12712 setTimeout(() => {
12713 checkIframe();
12714 }, waitTime);
12715 return;

Callers 1

checkIframeFunction · 0.85

Calls 4

resizeIframeFunction · 0.85
getPageEleFunction · 0.85
insertPageMethod · 0.80
checkIframeFunction · 0.70

Tested by

no test coverage detected