我试图在页面的onLoad事件触发之前执行一些JS.
但我无法成功调用stringByEvaluatingJavaScriptFromString的webViewDidStartLoad委托方法.
要重现此问题,您可以使用以下代码.
代表实施:
-(void)webViewDidStartLoad:(UIWebView *)webView {
[webView stringByEvaluatingJavaScriptFromString:@"window.valueHasBeenSet=true"];
}
Run Code Online (Sandbox Code Playgroud)
查看此HTML:
<html>
<head></head>
<body>
<script type="text/javascript" charset="utf-8">
if (window.valueHasBeenSet)
{
// We enter this branch the first time
document.write('<h3>Everything is OK. Value has been set.</h3>');
}
else
{
// We incorrectly enter this branch on reloads
document.write('<h3>Error. Value has not been set.</h3>');
}
</script>
<a href="javascript:window.location.reload()">Reload</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
此页面适用于第一个视图("一切正常".),但无论重新加载方法如何,都会在所有重新加载时失败.正如您可能期望的那样,这在shouldStartLoadWithRequest委托中也不起作用.
我也试过立即执行JavaScript以下webViewDidStartLoad同performSelector:withObject:afterDelay:0,但无济于事.
有任何想法吗?