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

时间:2014-05-30 16:24:27

标签: javascript ios webview

我正在加载由Nitro JS在本地IOS上的Web视图上绘制的图表。我有一个触发Graph加载的URL。我遇到了问题,因为webViewDidFinishLoad在实际图形加载之前起火。

2 个答案:

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