我正在加载由Nitro JS在本地IOS上的Web视图上绘制的图表。我有一个触发Graph加载的URL。我遇到了问题,因为webViewDidFinishLoad在实际图形加载之前起火。
答案 0 :(得分:1)
在页面上的JS完成执行之前,很可能页面加载实际上已完成(从浏览器的角度来看)。实际上,根据页面上JS的结构,这可能是预期的行为,例如,当图形仍然异步加载时,页面可能是可见的。如果您可以直接控制JS,则可能会改变此行为。
答案 1 :(得分:0)
了解页面何时完全加载的唯一方法是自己完成 - 将JavaScript事件侦听器附加到正在加载的页面中并让它们调用你的shouldStartLoadWithRequest:使用一些专有URL。例如,你可以创建一个JS函数来监听窗口加载或dom ready事件等,具体取决于你是否需要知道页面何时加载,或者只是dom已经加载等等。这取决于你的需求。 / p>
如果网页不是您的网页,那么您可以将此javascript放入文件中并将其插入到您加载的每个页面中。
例如,这里是用于检测dom何时加载到可以从UIWebView中注入加载页面然后导致调用shouldStartLoadWithRequest的形式的JavaScript :(这将调用shouldStartLoadWithRequestwhen:dom已完成loadeding,即在显示整页内容之前,检测到这只是改变事件监听器。)
草图形式的这样的东西:
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = function DOMReady() {
document.location.href = "mydomain://DOMIsReady";
}
function addScript()
{
document.getElementsByTagName('head')[0].appendChild(script);
document.addEventListener('DOMContentLoaded', DOMReady, false);
}
addScript();
但这仍然是100%完成,因为DOMContentLoaded不会等到所有资源(例如图像)被加载(参见此处http://ie.microsoft.com/TEStdrive/HTML5/DOMContentLoaded/Default.html),因此可能仍需要进行一些调整。 如果您正在编写正在加载的页面/正在执行的javascript,您将知道它何时完成,因此可以根据需要定制代码。如果您没有编写页面,则注入的js可能必须超出上述范围才能得到增强,以便考虑DOMContentLoaded不会等待的事实。