zoukankan      html  css  js  c++  java
  • Facebook在iPhone上的FBStreamDialog按下cancel后仍然执行succeed方法的bug及临时性解决方法

    在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不会有影响。
  • 相关阅读:
    C# 抽象方法和虚方法的区别
    xmlhttprequest readyState 属性的五种状态
    ServiceStack破解文件
    k8s部署mysql
    docker 开放2376端口的问题
    .net core 发布到IIS 没有 web.config 文件
    1064
    docker mysql 主从同步配置
    Docker 鼠标在虚拟机与主机之间自由切换
    Socket原理解析2
  • 原文地址:https://www.cnblogs.com/eagley/p/1736805.html
Copyright © 2011-2022 走看看