Das Beispiel in diesem Artikel beschreibt, wie JavaScript Rückrufe zum Durchlaufen von Webseiten-Unterseiten implementiert (einschließlich window.frames, rekursiver Funktionen und Funktionskontext). Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Es wurde aus einem von mir selbst geschriebenen reinen JavaScript-Toolprogramm extrahiert und wird zum Durchlaufen aller Unterseiten der aktuellen Webseite und zum Ausführen iterativer Rückrufe verwendet. Der Rückgabewert der Rückruffunktion kann zur Ergebnisrückgabe verwendet werden, was dazu beiträgt Abschlussvariablen reduzieren~
Sein Merkmal ist, dass beim rekursiven Durchlaufen nur das Window-Objekt der Unterseite abgerufen wird und die Rückruffunktion nicht sofort ausgeführt wird, sondern nach Abschluss des Abrufs in der normalen Schleifenstruktur zurückgerufen wird. Dies kann den Speicherverbrauch bei rekursiven Aufrufen minimieren, die Programmstruktur vereinfachen und die Wartung vereinfachen
Globale Funktion Frame_Each( CallBack ):
(function (BOM) { function All_Frames(iWindow) { var _Frames_ = [].slice.call(iWindow.frames, 0); for (var i = 0; i < _Frames_.length; i++) _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) ); return _Frames_; } BOM.Frame_Each = function (CallBack) { var Frames = [this].concat( All_Frames(this) ); if (! CallBack) return Frames; for (var i = 0, CBR; i < Frames.length; i++) { try { Frames[i].name; } catch (iError) { continue; } CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1)); if (CBR === false) break; else if (CBR === undefined) continue; return CBR; } }; })(self);
Anwendungsbeispiel:
// 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历 var Pages = Frame_Each(); console.log( Pages.length ); // 定义回调 —— 回调返回值功能与普通循环语句的对应: // 1. undefined:continue // 2. false:break // 3. 其它任何值:break && return Value var Search_Result = Frame_Each(function () { var iFocus = this.document.activeElement; switch ( iFocus.tagName.toLowerCase() ) { case 'body': return false; case 'iframe': return; } return iFocus; }); Search_Result.innerHTML = 'Hello, Focus!';
Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.