Cocoa webview UserAgent“webkit-legacy”问题

时间:2015-11-23 19:37:16

标签: css swift macos cocoa webkit

  

我解决了这个问题。看下面的选定答案!

我一直在努力寻找导致OSX Cocoa应用程序的WebView与Safari不同的原因。事实证明,用户代理是不同的(有点明显吗?),我正在访问的网站不知道如何处理。

令人惊讶的是,它是https://messenger.com(Facebook聊天)。

问题是它不会在屏幕上显示图片。它确实加载,但实际上并没有显示。看看这个......

Screenshot of testing app

如果你看看我编号为'2'的区域,你会看到空白区域。我没有审查那个。它只是空的。

所以这是我原来的问题链接:Simple Swift Cocoa app with WebKit: Upload picture doesn't work

我解决了第一个问题(感谢答案:D),但第二个问题仍然存在。

  
      
  1. 共享图片未显示 - 我在图片中标记为2。      
        
    • 再次,从其他浏览器或已发布的应用程序,它显示我与参与者共享的图片,如下所示。 (当然我审查了这些照片)   example of browser showing shared pics
    •   
  2.   

为了调试这个,我打开了Inspect Element,我发现了这个。

<body class=" webkit-legacy webkit mac x1 body_textalign Locale_en_US _z4_" dir="ltr">

当我从Safari加载完全相同的页面时,我会看到:

<body class="safari webkit mac x1 body_textalign Locale_en_US _z4_" dir="ltr">

所以我决定从我的应用程序的WebView和中提琴中替换该行!有用!所以...

TLDR:每次加载视图时如何才能完成这项工作?

我试图找到一些方法来设置我的用户代理到Safari,但我无法让它工作。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我已经创建了简单的示例应用程序并修复了此问题。我在Safari中提供了相同的用户代理。之后,共享照片按预期工作。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.webView.customUserAgent = @"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7";
    self.webView.mainFrameURL = @"https://messenger.com";
}

之后,我会比较用户代理:

原始WebView用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko)

Safari用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7

所以,看起来我只需要更改用户代理的最后一部分。像那样:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.webView.applicationNameForUserAgent = @"Safari/601.2.7";
    self.webView.mainFrameURL = @"https://messenger.com";
}

使用此代码,共享照片也可以使用。不幸的是,它并没有与我尝试的其他applicationNameForUserAgent值一起使用。

答案 1 :(得分:0)

正如所承诺的,这就是答案。

我在class Coords: def __init__(self, x1=0,y1=0, x2=0, y2=0): self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 def within_x(co1, co2): if (co1.x1 > co2.x1 and co1.x1 < co2.x2) \ or (co1.x2 > co2.x1 and co1.x2 < co2.x2) \ or (co2.x1 > co1.x1 and co2.x1 < co1.x2): return True else: return False def within_y(co1,co2): if (co1.y1 > co2.y1 and co1.y1 < co2.y2) \ or (co1.y2 > co2.y1 and co1.y2 < co2.y2) \ or (co2.y1 > co1.y1 and co2.y1 < co1.y2) \ or (co2.y2 > co1.y1 and co2.y2 < co1.y1): return True else: return False def collided_left(co1, co2): if within_y(co1, co2): if co1.x1 <= co2.x2 and co1.x1 >= co2.x1: return True return False def collided_right(co1, co2): if within_y(co1, co2): if co1.x2 >= co2.x1 and co1.x2 <= co2.x2: return True return False def collided_top(co1, co2): if within_y(co1,co2): if co1.y1 <= co2.y2 and co1.y1 >= co2.y1: return True return False def collided_bottom(y, co1, co2): if within_x(co1, co2): y_calc = co1.y2 + y if y_calc >= co2.y1 and y_calc <= co2.y2: return True return False 班中添加了这个功能。

ViewController

非常简单,但它的工作非常好。

我的应用程序本身仍有问题(例如,下载图片按钮不会触发文件资源管理器对话框),但基本功能如

  • 发送/接收消息
  • 查看分享的图片

工作得很好。

我打算为此工作

  • 下载图片
  • 通知

如果您有兴趣帮助我,请发表评论!

感谢大家的帮助:)