Tag: uiwebviewdelegate

UINavigationController和UIWebView中加载的网页之间可以进行通信?

我是iOS开发新手。 我会尽我所能解释我的问题,如果你觉得这很愚蠢,请原谅我。 我想知道是否可以通过单击UIWebView中的链接来加载UINavigationController中的子视图。 进一步解释,假设有UINavigationController有一个子视图,并且该子视图有一个名为A的UIWebView,还有另一个子视图(尚未加载),名为B.是否可以加载B(或执行任何其他本机目标C事件)当用户点击UIWebView A内的链接? 例如在iPhone的Instagram应用程序中,正如我所观察到的(我可能是错的),在由UINavigationControllers控制的视图中有UIWebViews。 在Web视图内添加一个链接会加载一个新的视图。 这是怎么回事? 是否可以设置在UIWebView内加载的网页与父/超级UIView?之间的通信。 如果我迷路,请纠正我。 到目前为止,我是iOS开发人员中的一员。 如果这是有道理的,也请参考API或教程来做到这一点。 提前致谢。

如何创build然后销毁一个类文件内的UIWebView

我试图在启动应用程序时在类文件中dynamic创build一个UIWebView。 我已经成功地得到了一个函数,在启动时在该类文件中被调用,但是当我添加代码来创buildwebview到该函数,我得到的错误是这样的:“ 试图从一个线程以外的网页锁主线程或Web线程,这可能是从辅助线程调用UIKit的结果。现在崩溃… “ 我的代码来创buildUIWebView是这样的: UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 16, 16)]; [webView setDelegate:self]; [webView setHidden:YES]; NSURL *url = [NSURL URLWithString:address]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; [webView loadRequest:urlRequest]; 我哪里错了?

在Safari中打开WebView链接

运行应用程序时,它首先加载,然后在Safari浏览器中加载网页。 我将如何在UIWebView加载页面,并在Safari中打开webView的外部链接? 这里是一些webviewcontroller.m的代码 – #import "WebViewController.h" @implementation WebViewController @synthesize webView; – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Initialization code } return self; } /* If you need to do additional setup after loading the view, override viewDidLoad. */ – (void)viewDidLoad { NSString *urlAddress = @"url link goes here"; […]

webViewDidFinishLoad在网页中有javascript内容时不会调用

我在一个项目中使用UIWebView 。 有时它不调用webViewDidFinishLoad方法。 因为网页有一些JavaScript的。 方法 – (BOOL) webView: (UIWebView *) webView shouldStartLoadWithRequest: (NSURLRequest *) request navigationType: (UIWebViewNavigationType) navigationType 正在调用,但webViewDidFinishLoad不。 我想抓住这个方法。 因为我在webview开始加载时开始animation。 然后我想在完成时停止这个animation。 这不是与具有JavaScript内容的网站。 任何人有一个想法吗? 谢谢

UIWebView:为什么请求在使用不存在的主机名时不超时?

我的情况是这样的: 我有一个UIWebView ,它向主机名由用户提供的URL发出POST请求。 当主机名不存在时,我需要超时,以便我可以提醒用户说他们应该检查他们的设置。 发生什么事: 我提出这样的要求: NSString *theURL = [NSString stringWithFormat:@"https://%@%@", _hostname, LOGIN_PART_URL]; NSString *body = [NSString stringWithFormat:@"Username=%@&Password=%@", _username, _password]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:theURL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:_timeoutInSecs]; [request setHTTPMethod: @"POST"]; [request setHTTPBody: [body dataUsingEncoding: NSUTF8StringEncoding]]; [web loadRequest:request]; 当networking上不存在主机名时,我不会收到任何超时响应。 我已经实现了UIWebViewDelegate所有委托方法,并且当我使用一个不存在的主机名时,我得到以下调用: webView: shouldStartLoadWithRequest: navigationType: (为了testing,总是返回true) webViewDidStartLoad 就是这样 – 之后没有任何东西。 我很惊讶, webViewDidStartLoad被调用,因为这表明它find了URL,并认为它可以从中获取数据。 但它不能作为URL不存在! 我在这里做错了什么? 我有一个解决方法,我要实现,它使用NSTimer来查看是否在超时时间内收到响应。 不过,我在取消UIWebView的请求方面遇到了问题 – […]

检测并拦截UIWebView中的video播放

我想拦截一个UIWebView的点击,然后使用video的URL。 这怎么可能? 我发现一个有点类似的post,指出遇到了 webView:shouldStartLoadWithRequest:navigationType: 代表。 我似乎无法得到这个代表的video加载的url。 我试图让代码在iOS8中工作

在没有NSNotificationCenter的iOS 8中正确强制或允许Youtubeembeddedvideo的横向模式

我遇到的问题是,在iOS 8中,youtube播放器将以全屏方式进入或退出全屏模式,这是因为这些通知已被移除UIMoviePlayerControllerDidEnterFullscreenNotification和UIMoviePlayerControllerWillExitFullscreenNotification 。 由于我的应用程序项目设置为仅在肖像模式下,video在播放时不会旋转到横向模式,而在您的设备上观看video时,实际上并不太方便用户使用。 通常用户想要在全屏模式下以纵向模式或横向模式观看video。 这是我做iOS 7的方式 ,这是完美的,但不是在iOS 8。 首先,我将在我的AppDelegate.m使用布尔属性在我的AppDelegate.h设置这个函数,我称之为videoIsInFullscreen和函数, // this in the AppDelegate.h @property (nonatomic) BOOL videoIsInFullscreen; // This in my AppDelegate.m to allow landscape mode when the boolean property is set to yes/true. – (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ if(self.videoIsInFullscreen == YES) { return UIInterfaceOrientationMaskAllButUpsideDown; } else { return UIInterfaceOrientationMaskPortrait; } } 然后,在我的ViewController.m首先,我会#import […]

如何查找UIWebView的最后一个负载(就绪状态4)

UIWebView中的didFinishLoad方法存在问题,它一直在触发。 我想尝试estimatedProgress 解决scheme ,但是我不知道在哪里find这些框架不幸的。 我正在运行Mountain Lion并使用最新版本的XCode。 此外,对于UIWebView多次发射,这是最好的方式去或有新的方法。 这似乎是一个JavaScript的答案 ,但是这并不适用于我。 那是在2009年,我听说苹果拒绝任何使用私有API的应用程序。 请帮我在这里! 谢谢大家!

UIWebView的进度条(和networking活动状态)

经过长时间的rest,我又开始做ios开发了。 考虑到这一点,我下载了最新版本的XCode(5.02),并设置了以ios7作为目标的应用程序编码。 一切都很好,直到我添加一个“webView页面”到我的应用程序。 我天真地期待UIWebView像Safari中的页面一样工作,但事实并非如此。 最明显的缺点是在加载页面时,用户完全没有反馈。 即networking活动指示器完全不显示,页面加载时不显示进度条。 所以我想你只需要手动添加这些。 那不应该太难,应该吗? 几天后,我得到了很好的工作,但我不满意的结果。 我花了很多的debugging和试验来获得我现在的位置。 我想我的问题是“有什么可以改进我的方法吗?” 也可能是“我应该向苹果公司报告装载和请求财产问题,并要求他们解决这些问题”? 最初,我在网上寻找解决这个问题的方法,关于它的stackoverflow有几个问题,但似乎没有人真正破解它。 一些build议的方法: 使用一个私人的UIWebView API(如果你想把你的应用程序发布到商店就不好) 使用NSURLConnection下载页面(仅提供初始页面下载的进度) 使用第三方库下载和处理页面(大锤破解螺母?) 使用一个UIWebViewDelegate并保持加载开始和结束的轨迹 使用UIWebViewDelegate手动显示和隐藏networking活动指示器 最后我决定使用4.和5.但是它很棘手,因为: 开始和结束通话可以按任何顺序进行 一些请求开始,但从未完成 一些请求完成时出现错误 第一个问题可以通过计算启动和结束来解决,通过确保计算的进度百分比仅仅增加,并且在最后一个请求完成时只closuresnetworking指示器。 第二个问题更难解决。 UIWebView有两个属性,原则上可以用来做(加载和请求),但他们似乎以神秘的方式工作。 我在这里find的一些答案和评论build议,加载属性从来没有更新,但要求是。 这对我来说最初是有道理的,因为页面从来没有真正停止加载(他们可能有dynamic内容),所以加载属性只会告诉你,如果Web视图正在积极加载内容(即如果loadRequest已被调用,stopLoading hasn “T)。 但是,至less在ios7上,它实际上是以相反的方式工作的。 请求属性永远不会更新,所以你不能使用请求属性来确定视图是否已经完成加载一切(即通过检查已完成的请求是否是初始请求)。 加载属性会更新,当页面完全加载时,它会被设置为NO。 这有很大的帮助,但我注意到,dynamic内容(例如页面广告)导致加载重置为YES,所以处理仍然有点棘手。 第三个问题不会是一个问题,除非我已经观察到,在webView:didFailLoadWithError中加载属性始终设置为NO。 这似乎是一个临时的状态,但是,如果你想你可以忽略错误,并等待加载被设置为NO在webViewDidFinishLoad。 由于请求属性没有更新,所以不可能知道它是最初的失败请求还是其中一个子请求(你可能会也可能不关心)。 所以我决定采用一种解决scheme,让程序员select他们想要的行为。 事情会更容易,如果: 请求属性已更新(或当前请求已传入,就像在webView中:shouldStartLoadWithRequest:navigationType) 在webView:didFailLoadWithError中加载属性设置正确 这里是我的代码在视图控制器的webView: – (void)resetProgress { framesToLoad = 0; framesLoaded = 0; currentProgress = 0.0f; […]

UIWebViewDelegate:webViewDidFinishLoad在页内导航期间不被调用

我有一个应用程序,用户可以浏览一堆本地存储的HTML文件。 我有一个UIWebView ,用UIWebViewDelegate正确configuration。 通常,当用户关注链接时, shouldStartLoadWithRequest被调用,随后webViewDidFinishLoad被稍后调用。 但是,如果链接指向与当前显示的页面相同的页面上的锚点,则只shouldStartLoadWithRequest 。 webViewDidFinishLoad不会触发。 从某种意义上说,我发现这可能是预期的行为,因为页面内导航不应该要求页面重新加载。 不过,在页内导航完成后,我确实需要一个地方来挂钩调用堆栈。 最佳的解决scheme会让我知道何时导航已经结束,无论是来自另一页,页内和前进/后退动作。 到目前为止,我最好的方法是调用performSelector: withObject: afterDelay:在我的shouldStartLoadWithRequest方法的结尾处​​,但是我对此并不满意。 有谁知道我能如何解决这个问题? 任何洞察赞赏!