我解决了这个问题。看下面的选定答案!
我一直在努力寻找导致OSX Cocoa应用程序的WebView与Safari不同的原因。事实证明,用户代理是不同的(有点明显吗?),我正在访问的网站不知道如何处理。
令人惊讶的是,它是https://messenger.com(Facebook聊天)。
问题是它不会在屏幕上显示图片。它确实加载,但实际上并没有显示。看看这个......
如果你看看我编号为'2'的区域,你会看到空白区域。我没有审查那个。它只是空的。
所以这是我原来的问题链接:Simple Swift Cocoa app with WebKit: Upload picture doesn't work
我解决了第一个问题(感谢答案:D),但第二个问题仍然存在。
为了调试这个,我打开了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和中提琴中替换该行!有用!所以...
我试图找到一些方法来设置我的用户代理到Safari,但我无法让它工作。有什么建议吗?
答案 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
非常简单,但它的工作非常好。
我的应用程序本身仍有问题(例如,下载图片按钮不会触发文件资源管理器对话框),但基本功能如
工作得很好。
我打算为此工作
如果您有兴趣帮助我,请发表评论!
感谢大家的帮助:)