【发布时间】:2014-08-23 08:28:29
【问题描述】:
我正在为 Java SE API 参考文档 [http://docs.oracle.com/javase/8/docs/api/] 编写一个简单的 Greasemonkey 脚本。它是这样的:
// ==UserScript==
// @id Test
// @grant none
// @include http://docs.oracle.com/javase/8/docs/api/*
// @version 1
// @run-at docuitment-end
// ==UserScript==
var classNamesFrame = null;
var classNamesDoc = null;
var classNamesATags = null;
var classNames = null;
function printClassNames()
{
classNamesATags = classNamesDoc.getElementsByTagName('a');
classNames = new Array();
var i;
for (i = 0; i < classNamesATags.length; i++) {
classNames.push(classNamesATags[i].textContent);
}
console.log(classNames);
console.log(classNamesDoc.URL);
console.log('Total number of classes: ' + classNamesATags.length);
alert("printClassNames called");
}
classNamesFrame = document.getElementsByName('packageFrame') [0];
classNamesDoc = classNamesFrame.contentDocument;
classNamesFrame.onload = printClassNames;
//classNamesFrame.addEventListener("DOMContentLoaded", printClassNames, false);
函数printClassNames() 打印它在列出所有类的框架中找到的所有类的名称。当框架完成加载时,我应该这样做。但是 onload 甚至在加载框架的 HTML 文档之前被调用。
我尝试过使用DOMContentLoaded 事件,但它甚至没有被调用。
我该怎么做才能在框架完全加载完成后调用printClassNames?
【问题讨论】:
-
框架的内容是如何填充的?服务器端还是通过 AJAX?
-
@ChrisHardie 它通过服务器(如果我理解正确的话),如:
<frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)"> -
所有类是如何加载到框架中的?
-
@ChrisHardie Frame 有一个关联的 HTML 源代码,浏览器会加载它们。
标签: javascript dom greasemonkey dom-events html-frames