Jua*_*ank 3 macos iframe cocoa webview
早上好,
我有一个 mac webView(不是 iOS UIWebView),它加载的 url 指向http://localhost:8888. 加载的 html 包含链接和 iframe,但是当加载 iframe 或单击链接时,主页会尝试加载http://localhost:8888/%E2%80%9Chttp://example.com%E2%80%9D然后重新加载原始页面http://localhost:8888.。更奇怪的是,打开的链接或 iframe 确实试图加载http://localhost:8888/%E2%80%9Chttp://example.com%E2%80%9D.
我试图用decidePolicyForNavigationAction 来处理这个问题,但[request URL]值以这种方式到达并解析它以提取嵌入的url 似乎很hackish。
关于为什么 webView 以这种方式构建 url 以及如何正确处理加载 iframe 和链接的任何想法?
- (void)webView:(WebView *)webView
decidePolicyForNavigationAction:(NSDictionary *)actionInformation
request:(NSURLRequest *)request
frame:(WebFrame *)frame
decisionListener:(id <WebPolicyDecisionListener>)listener
{
NSLog(@"Navigating to %@", [request URL]); // returns http://localhost:8888/%E2%80%9Chttp://example.com%E2%80%9D
[listener use];
}
- (void)webView:(WebView *)webView
decidePolicyForNewWindowAction:(NSDictionary *)actionInformation
request:(NSURLRequest *)request
newFrameName:(NSString *)frameName
decisionListener:(id < WebPolicyDecisionListener >)listener {
if ([actionInformation objectForKey:WebActionElementKey]) {
// Happens here also :(
NSLog(@"Opening in browser %@", [request URL]);
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的 URL 具有转义序列%E2%80%9C并对其进行%E2%80%9D包装。这些是URI转义序列“和”分别。那些看起来像",但“开始”和“结束”双引号的字符略有不同。当 webView 处理 HTML 并在 之后查找属性值时href,webView 没有找到按预期包装属性值的双引号或单引号。相反,它会找到另一个字符。由于引用不是预期的 HTML 属性引用字符,因此 webView 将其解释为 URL 的一部分。由于 URL 不以已知协议(http://、https://等)或 URL 根 ( /)开头,因此 webView 将 URL 解释为相对于给定 URL (http://localhost:8888/)。为了使其成为有效的 URL(特定 ASCII 字符),它会转义两个非 ASCII 富引号字符。这就是为什么它们在您的 URL 中显示为%E2%80%9Cand%E2%80%9D而不是“and 的原因”。更简洁:
href=“http://example.com” 不一样 href="http://example.com"“http://example.com”,不是http://example.comhttp://localhost:8888/“http://example.com”http://localhost:8888%E2%80%9Chttp://example.com%E2%80%9D最有可能的是,有人从 Word 文档或其他富文本格式器之类的东西中复制并粘贴了 HTML,这通常会将简单的双引号变成“更丰富”的格式双引号。用适当的双引号或单引号替换丰富的引号,您的链接将开始按预期工作。
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |