gpt4 book ai didi

ios - 需要 fb :like in UIWebView with edge. 创建/删除事件触发的工作示例

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:39 26 4
gpt4 key购买 nike

简短总结:edge.create 停止在 UIWebView 内的嵌入式 HTML 中触发(我有一段时间没有更改代码中的任何内容)- 有什么办法可以取回它吗?


我有一个 iOS 应用程序,它有 UIWebView 和 Facebook Like 按钮。 enter image description here

用户在出现此对话框之前登录 Facebook,因此不会发生登录逻辑。

我可以点击喜欢/不喜欢 - 它工作正常 - 但它曾经关闭对话框,几天前它坏了。关闭对话框是通过订阅 edge.create/edge.remove 事件实现的。

这是我的 HTML 页面:

<html>
<head>
<style type='text/css'>
* { -webkit-touch-callout: none; -webkit-user-select: none; }
body { margin:0px; }
.fb_edge_comment_widget { display: none !important; }
</style>
</head>
<body>
<div id='fb-root'></div>
<script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></script>
<script>
function forwardEvent(name) {
var iframe = document.createElement('iframe');
iframe.setAttribute('src', 'event:' + name);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
};
function beginForwardingEvent(name) {
FB.Event.subscribe(name, function(r) { forwardEvent(name); });
};
function beginForwardingEvents(names) {
for (var i = 0; i < names.length; i++) {
beginForwardingEvent(names[i]);
}
};
beginForwardingEvents(['edge.create', 'edge.remove', 'xfbml.render']);
</script>
<fb:like href='%@'
send='false'
layout='%@'
width='%.0f'
show_faces='%@'
action='%@'
colorscheme='%@'
font='%@'
></fb:like>
</body>
</html>

下面是我如何在 Objective-C 代码中捕获事件:

- (void)didObserveFacebookEvent:(NSString *)fbEvent {
if ([fbEvent isEqualToString:@"edge.create"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidLike:)])
[_delegate facebookLikeViewDidLike:self];
else if ([fbEvent isEqualToString:@"edge.remove"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidUnlike:)])
[_delegate facebookLikeViewDidUnlike:self];
else if ([fbEvent isEqualToString:@"xfbml.render"] && [_delegate respondsToSelector:@selector(facebookLikeViewDidRender:)])
[_delegate facebookLikeViewDidRender:self];
}


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// Allow loading Like button XFBML from file
if ([request.URL.scheme isEqualToString:@"file"])
return YES;

// Allow loading about:blank, etc.
if ([request.URL.scheme isEqualToString:@"about"])
return YES;

// Block loading of 'event:*', our scheme for forwarding Facebook JS SDK events to native code
else if ([request.URL.scheme isEqualToString:@"event"]) {
[self didObserveFacebookEvent:request.URL.resourceSpecifier];
return NO;
}
....
}

所以再一次 - edge.create 停止触发(我有一段时间没有更改代码中的任何内容) - 有什么办法可以取回它吗?

谢谢。

更新:虽然有一个 FB bug reported ,我仍然想了解为什么它在 FBRELL 上有效站点,但在 iOS UIWebView 中不起作用。 iOS 对话框可能需要进行调整?有解决方法吗?开始赏金希望得到答案。

最佳答案

似乎 edge.create 事件不会在本地 HTML 文件中触发。我不确定这是偶然还是设计,但我已经做了一些事情并让它发挥作用:

  1. 在我自己的服务器上托管“FacebookLikeView.html”文件,用格式说明符替换我想要的实际值,例如action='%@' 现在明确地是 action='like'

  2. 从 FacebookLikeView.m 中的 load 方法中删除了所有内容,并将其替换为以下行:

    [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.yourhost.com/FacebookLikeView.html"]]];
  3. 更改了 webView:shouldStartLoadWithRequest:navigationType 方法中的行:

    if ([request.URL.scheme isEqualToString:@"file"])
    return YES;

    if ([request.URL.host hasSuffix:@"yourhost.com"]) 
    return YES;

这不是您希望得到的答案,但我希望这能为您提供一些线索,同时至少有助于让它正常工作。

关于ios - 需要 fb :like in UIWebView with edge. 创建/删除事件触发的工作示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com