Path: csiph.com!usenet.pasdenom.info!news.franciliens.net!news.muarf.org!nntpfeed.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <31855897.f2HLQ4rEVA@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Sat, 18 May 2013 16:25:50 +0200 User-Agent: KNode/4.10.2 Content-Transfer-Encoding: 8Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. <2083966.lBPHQm9WGc@PointedEars.de> MIME-Version: 1.0 Lines: 85 NNTP-Posting-Date: 18 May 2013 16:25:53 CEST NNTP-Posting-Host: f0b795b5.newsspool2.arcor-online.net X-Trace: DXC=bfTlbmFL11HWDmlTRbh@=IA9EHlD;3YcB4Fo<]lROoRA8kFdWjfmTBDZm8W4\YJNLb@mF9jNikdEBoKGPB=12AG\o_mJQWNmhM X-Complaints-To: usenet-abuse@arcor.de Xref: csiph.com comp.lang.javascript:19813 Andrew Poulos wrote: > On 16/05/2013 7:12 PM, Thomas 'PointedEars' Lahn wrote: >> Andrew Poulos wrote: >>> I tried writing a recursive function (that sits in the elearning page) >>> that searched all frames in the elearning's top window and in the top >>> window of any opener which appears to work: >>> >>> function findAPI(win) { >>> if (win.API) { >>> return win.API; >>> } >>> >>> for (var i = 0; i < win.frames.length; i++) { >> var api = findAPI(win.frames[i]); >> if (api) { >> return api; >>> } >>> } >>> >>> if (win.opener && !win.opener.closed) { >>> return findAPI(win.opener.top); >>> } >>> } >>> >>> function fLook() { >>> var foundApi = findAPI(window.top); >>> window.alert(foundApi); >>> } >>> >>> Any ideas on how to make this (more) robust? For example, its not >>> checking nested frames. >> >> Now it does. > > Too easy! Thanks for the help. You're welcome. An omission and a further suggestion on my part, though. The omission: for (var i = 0, len = win.frames.length; i < len; i++) is more efficient than for (var i = 0; i < win.frames.length; i++) and as safe if you can be sure that the number of items does not change while looping. For that matter, if you stored the value of “win.frames” in a variable and access that variable instead, it would be even more efficient: for (var i = 0, frames = win.frames, len = frames.length; i < len; i++) { var api = findAPI(frames[i]); if (api) { return api; } } Or you might want to wrap it as suggested e. g. in (from David Bryant Copeland [@davetron5000 at Github], by tweet of @kevinSuttle): for (var i = 0, frames = win.frames, len = frames.length; i < len; i++) { var api = findAPI(frames[i]); if (api) { return api; } } The suggestion: _it's_ _e-learning_ :) -- PointedEars Twitter: @PointedEars2 Please do not Cc: me. / Bitte keine Kopien per E-Mail.