iOS UIWebView不接受URL更改
我的UIWebView有一个奇怪的问题,它不接受任何更改 当我启动应用程序时,它会完美地加载URL,委托方法会按应该的方式启动,但UIWebView不会接受此后的任何操作,比如隐藏它或更改它的URL。当我调用iOS UIWebView不接受URL更改,ios,objective-c,uiwebview,Ios,Objective C,Uiwebview,我的UIWebView有一个奇怪的问题,它不接受任何更改 当我启动应用程序时,它会完美地加载URL,委托方法会按应该的方式启动,但UIWebView不会接受此后的任何操作,比如隐藏它或更改它的URL。当我调用[webView loadRequest:urlRequest]若要将当前URL更改为另一个URL,将触发委托方法,但WebView会继续查看旧页面,没有更改(仅指示器显示几秒钟,然后webviewdistartoad和webviewdisfinishload和shouldstartoadw
[webView loadRequest:urlRequest]
若要将当前URL更改为另一个URL,将触发委托方法,但WebView会继续查看旧页面,没有更改(仅指示器显示几秒钟,然后webviewdistartoad
和webviewdisfinishload
和shouldstartoadwithrequest
中的日志命令工作正常)
下面是一个场景:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"viewDidLoad");
NSString *urlString = @"http://old.example.com";
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
// For here, everything is fine, the WebView loads the OLD URL
webView.delegate = self;
webView.opaque = NO;
webView=[[UIWebView alloc]init];
[webView setBackgroundColor:[UIColor grayColor]];
[webView setDelegate:(id<UIWebViewDelegate>)self];
[self.view addSubview:webView];
activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.frame = CGRectMake(200.0, 200.0, 100.0, 40.0);
activityIndicator.center = self.view.center;
[self.view addSubview: activityIndicator];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(loadNotificationUrl:)
name:@"loadNotificationUrl" object:nil];
}
-(void)loadNotificationUrl:(NSNotification*) notification
{
// Now the notification arrives holding the NEW URL
NSDictionary* userInfo = notification.userInfo;
NSString* NotificationUrl = (NSString*)userInfo[@"url"];
NSLog (@"Successfully received: %@", NotificationUrl); // it gets --> "http://new.example.com"
NSURL *url = [NSURL URLWithString:NotificationUrl];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSLog(@"Before Load: %@", [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"]); // --> this is showing "about:blank"!!
[webView loadRequest:urlRequest]; // This works but doesn't change anything in the WebView! OLD page still showing.
}
-(void)viewDidLoad
{
[超级视图下载];
NSLog(@“viewDidLoad”);
NSString*urlString=@”http://old.example.com";
NSURL*url=[NSURL URLWithString:urlString];
NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:url];
[webView loadRequest:urlRequest];
//在这里,一切正常,WebView加载旧URL
webView.delegate=self;
webView.不透明=否;
webView=[[UIWebView alloc]init];
[webView setBackgroundColor:[UIColor grayColor]];
[webView setDelegate:(id)self];
[self.view addSubview:webView];
activityIndicator=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.frame=CGRectMake(200.0,200.0,100.0,40.0);
activityIndicator.center=self.view.center;
[self.view addSubview:activityIndicator];
[[NSNotificationCenter defaultCenter]添加观察者:self
选择器:@selector(loadNotificationUrl:)
名称:@“loadNotificationUrl”对象:nil];
}
-(void)loadNotificationUrl:(NSNotification*)通知
{
//现在,通知到达时包含新的URL
NSDictionary*userInfo=notification.userInfo;
NSString*通知url=(NSString*)用户信息[@“url”];
NSLog(@“成功接收:%@”,通知URL);//它获取-->“http://new.example.com"
NSURL*url=[NSURL URLWithString:NotificationUrl];
NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:url];
NSLog(@“加载前:%@,[webView stringByEvaluatingJavaScriptFromString:@”window.location.href“]);//-->这显示的是“关于:空白”!!
[webView loadRequest:urlRequest];//这可以工作,但不会改变webView中的任何内容!仍显示旧页面。
}
有人能告诉我我遗漏了什么吗?初始请求加载到与未来不同的web视图中。如果在代码中查找,则有
[webView loadRequest:urlRequest]代码>
接下来的几行是webView=[[UIWebView alloc]init]
将webView
变量设置为新的UIWebView实例,然后将其添加到视图中。但此web视图不可见,因为它的框架可能是CGRectZero
。委托方法正在激发,因为您已将新实例的委托设置为self,但再次无法看到结果
删除webView=[[UIWebView alloc]init]如果您在其他地方初始化了web视图,那么代码>和事情可能会按照您的预期运行。初始请求将加载到与将来不同的web视图中。如果在代码中查找,则有[webView loadRequest:urlRequest]代码>
接下来的几行是webView=[[UIWebView alloc]init]
将webView
变量设置为新的UIWebView实例,然后将其添加到视图中。但此web视图不可见,因为它的框架可能是CGRectZero
。委托方法正在激发,因为您已将新实例的委托设置为self,但再次无法看到结果
删除webView=[[UIWebView alloc]init]代码>,假设您已在其他位置初始化了web视图,则事情可能会按照您的预期运行。在loadRequest:urlRequest之后,您已创建一个新的UIWebView,它将覆盖旧的webView,请将其删除。在loadRequest:urlRequest之后,您已创建一个新的UIWebView,它将覆盖旧的webView,请将其移除。移动此行:
webView=[[UIWebView alloc]init];
[webView loadRequest:urlRequest];
在这一行之前:
webView=[[UIWebView alloc]init];
[webView loadRequest:urlRequest];
在这种方法中:
viewDidLoad
移动此行:
webView=[[UIWebView alloc]init];
[webView loadRequest:urlRequest];
在这一行之前:
webView=[[UIWebView alloc]init];
[webView loadRequest:urlRequest];
在这种方法中:
viewDidLoad
删除webView=[UIWebView alloc]init];应该可以工作删除webView=[UIWebView alloc]init];该工作了谢谢你,你让我很开心!这是干什么的<代码>网络视图=[[UIWebView alloc]init]你让我开心,谢谢你!这是干什么的<代码>网络视图=[[UIWebView alloc]init]代码>