webViewDidFinishLoad在从URL加载实际图形之前触发

webViewDidFinishLoad fires before the actual graph load from the URL

本文关键字:图形 在从 URL 加载 webViewDidFinishLoad      更新时间:2023-09-26

我正在加载一个由Nitro JS在原生IOS的web视图上绘制的图形。我有触发图形加载的URL。我面临的问题,因为webViewDidFinishLoad得到火之前实际的图形完全加载。

很可能在页面上的JS完成执行之前,页面加载实际上已经完成(从浏览器的角度来看)。实际上,这取决于页面上JS的结构,这可能是预期的行为,例如,当图形仍然异步加载时,页面可能是可见的。如果你能直接控制JS,你就可以改变这个行为

知道页面何时完全加载的唯一方法是自己做-将JavaScript事件侦听器附加到正在加载的页面中,并让它们使用一些专有url调用您的shouldStartLoadWithRequest:。例如,你可以创建一个JS函数来监听窗口加载或dom就绪事件等,这取决于你是否需要知道页面何时加载,或者如果只是dom已经加载等。根据你的需要。

如果这个网页不是你的,那么你可以把这个javascript放到一个文件中,并把它注入到你加载的每个页面。

例如,这里是JavaScript检测dom加载时的形式,可以从UIWebView注入到加载页面,然后导致调用shouldStartLoadWithRequest:(这将调用shouldStartLoadWithRequestwhen: dom已经完成加载,这是在完整的页面内容被显示之前,要检测这只是改变事件监听器)。

类似这样的草图形式:

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不会等待的事实。