在FBDialog.m的

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request

    navigationType:(UIWebViewNavigationType)navigationType

方法中有以下代码:

if ([url.scheme isEqualToString:@"fbconnect"]) {

  if ([url.resourceSpecifier isEqualToString:@"cancel"]) {

    [self dismissWithSuccess:NO animated:YES];

  } else {

    [self dialogDidSucceed:url];

  }

...
Facebook通过判断url的值,确定用户是点了Cancel还是Publish。
然而在FBStreamDialog中无论用户点哪一个,返回的url都是"fbconnect:success"。
因此程序只会执行succeed的操作,而忽视cancel的操作。
通过google搜索该问题,找到临时性解决方法:在FBDialog.m中的

- (void)webViewDidFinishLoad:(UIWebView *)webView {

方法中添加以下代码:

 [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('cancel').onclick = function onclick(event) { window.location.href = 'fbconnect:cancel'; }"];

该代码使用javascript语句将FBDialog打开的页面中的cancel按键对应的onClick指向的链接(原本是"fbconnect:success")替换成"fbconnect:cancel"。
由于同样使用webViewDidFinishLoad方法的FBLoginDialog类的cancel链接原本就是"fbconnect:cancel",因此该代码对FBLoginDialog的cancel不会有影响。
posted on 2010-05-16 16:22  eagley  阅读(675)  评论(0编辑  收藏  举报