Objective c jQuery Mobile在离开webView中的主页后未触发webViewDidStartLoad和webViewDidFinishLoad
我有一个简单的iOS应用程序,它有一个包含UIWebView的单一视图。在我的webView中,我显示我的jQuery移动网站 由于jQuery Mobile通过ajax加载页面,因此在初始页面加载后不会调用Objective c jQuery Mobile在离开webView中的主页后未触发webViewDidStartLoad和webViewDidFinishLoad,objective-c,xcode,ios5,jquery-mobile,uiwebview,Objective C,Xcode,Ios5,Jquery Mobile,Uiwebview,我有一个简单的iOS应用程序,它有一个包含UIWebView的单一视图。在我的webView中,我显示我的jQuery移动网站 由于jQuery Mobile通过ajax加载页面,因此在初始页面加载后不会调用webViewDidStartLoad和webViewDidFinishLoad方法。我在SO上发现了类似的问题,例如,但我不确定在哪里使用window.location=“localFunction”调用,而且还没有人确认这是否有效 以下是我的问题(示例): 应用程序启动 调用了shoul
webViewDidStartLoad
和webViewDidFinishLoad
方法。我在SO上发现了类似的问题,例如,但我不确定在哪里使用window.location=“localFunction”
调用,而且还没有人确认这是否有效
以下是我的问题(示例):
shouldStartLoadWithRequest
webview加载
,并显示网络活动指示器webViewDidFinishLoad
被调用,网络活动指示器被隐藏,webView显示初始网页shouldStartLoadWithRequest
webViewDidStartLoad
和
webViewDidFinishLoad
在整个过程中不会再次调用
会议有没有办法强制jQuery Mobile或iOS应用程序调用
webViewDidStartLoad
和webViewDidFinishLoad
以便我可以执行一项简单的任务,例如在调用webViewDidStartLoad
时显示网络活动指示器,在调用webViewDidFinishLoad
时隐藏它 webViewDidStartLoad
和webViewDidFinishLoad
仅在window.location
更改时调用UIWebView
无法拦截Ajax调用
您可以通过设置ajaxEnabled=“false”
全局关闭JQM的Ajax导航,也可以使用data Ajax=“false”
关闭单个页面/链接
或
如果问题只是显示活动指示器;您可以通过调用
$.mobile.showPageLoadingMsg
webViewDidStartLoad
和webViewDidFinishLoad
来使用JQM的内置活动指示器。只有在窗口位置更改时才会调用UIWebView
无法拦截Ajax调用
您可以通过设置ajaxEnabled=“false”
全局关闭JQM的Ajax导航,也可以使用data Ajax=“false”
关闭单个页面/链接
或
如果问题只是显示活动指示器;如果要向页面更改的UIWebView
发出信号,可以通过调用$.mobile.showPageLoadingMsg
使用JQM的内置活动指示器;您可以使用问题中SO帖子中讨论的自定义方案启动选项
定义一个窗口。在pagebeforechange
处理程序中的位置更改:()
在javascript中使用它
$(document).on("pagebeforechange", function(eve, ui){
logToIosConsole("pagebeforechange called on "+eve.currentTarget.URL);
});
在您的shouldStartLoadWithRequest中拦截此自定义url方案
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *theAnchor=[[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
if([theAnchor hasPrefix:@"log:\/\/"]) {
NSString *logText=[theAnchor substringFromIndex:@"log:\/\/".length];
NSLog(@"LogMsg==>%@",logText);
return NO;
}
}
如果您想发出页面更改的UIWebView
;您可以使用问题中SO帖子中讨论的自定义方案启动选项
定义一个窗口。在pagebeforechange
处理程序中的位置更改:()
在javascript中使用它
$(document).on("pagebeforechange", function(eve, ui){
logToIosConsole("pagebeforechange called on "+eve.currentTarget.URL);
});
在您的shouldStartLoadWithRequest中拦截此自定义url方案
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *theAnchor=[[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ;
if([theAnchor hasPrefix:@"log:\/\/"]) {
NSString *logText=[theAnchor substringFromIndex:@"log:\/\/".length];
NSLog(@"LogMsg==>%@",logText);
return NO;
}
}
jQuery移动站点呈现页面的方式有问题。如果您禁用该站点的ajax导航,它们确实会被调用。在启用Ajax的情况下,单击链接时不会调用webViewDidStartLoad,因为页面是通过Ajax请求的,窗口位置不会更改,因此iOS不会注册页面更改或页面加载 jQuery移动站点呈现页面的方式有问题。如果您禁用该站点的ajax导航,它们确实会被调用。在启用Ajax的情况下,单击链接时不会调用webViewDidStartLoad,因为页面是通过Ajax请求的,窗口位置不会更改,因此iOS不会注册页面更改或页面加载 谢谢你的快速回复。。。我的JQM活动指示器正在显示,我只是想调用我的应用程序中的一些其他东西,这些东西将由webviewdidstartoad
和webViewDidFinishLoad
方法调用。所以关闭ajax导航是唯一的解决办法?我会很快尝试…谢谢你的快速回复。。。我的JQM活动指示器正在显示,我只是想调用我的应用程序中的一些其他东西,这些东西将由webviewdidstartoad
和webViewDidFinishLoad
方法调用。所以关闭ajax导航是唯一的解决办法?我会很快尝试…启用ajax后,webViewDidStartLoad
函数仍然没有被调用,即使使用了“mylog”功能。使用我当前项目中的代码进行更新,我从JS登录到Xcode控制台……你能给我一个关于这将做什么的快速解释吗?(提前感谢)当在UIWebView中运行时,Javascript对LogToioConsole(msg)的所有调用都会将“msg”记录到xCode/iOS控制台。log://充当了从JS向ObjC发送消息的桥梁。我不认为这仍然会调用webViewDidStartLoad
和webViewDidFinishLoad
。看看我在你上面的答案——jQuery Mobile通过Ajax加载页面似乎有问题。我真的很感谢你的帮助!启用ajax后,webViewDidStartLoad
函数仍然没有被调用,即使使用“mylog”功能也是如此。使用我当前项目中的代码进行更新,我从JS登录到Xcode控制台……你能给我一个关于这将做什么的快速解释吗?(提前感谢)当在UIWebView中运行时,Javascript对LogToioConsole(msg)的所有调用都会将“msg”记录到xCode/iOS控制台。log://充当了将消息从JS发送到ObjC的桥梁