【问题标题】:Webkit page scaling in CocoaCocoa 中的 Webkit 页面缩放
【发布时间】:2012-06-25 18:08:06
【问题描述】:

我正在为 Mac 制作一个基于 WebKit 的文本编辑器应用程序,我需要找到一种方法来放大和缩小文档。

我看过这篇 StackOverflow 文章 here,它建议只是缩放 Webkit 渲染到的视图。问题是,由于 Webkit 不知道它,这会破坏拖放等操作,并导致 Javascript 报告错误的光标位置。不幸的是,出于某种原因,Cocoa WebKit API 只支持放大或缩小文本,而不支持整个页面。

Safari 和 Chrome 都能够正确执行此操作。我已经查看了 Chromium 源代码以了解它是如何完成的,但不幸的是它使用了完全不同的跨平台 API。

任何建议将不胜感激。如果我能弄清楚如何以安全的方式使用它们,我并不反对使用私有 API。

-基顿

【问题讨论】:

  • WebKit.framework 也是开源的,挖掘并找到盗版 API 并不难

标签: macos cocoa webkit


【解决方案1】:

用于执行此操作的 API 目前尚未公开,但它们已经存在多年并且不太可能改变。您可以在 WebKit 的WebViewPrivate.h header 中找到它们。您不会在系统上找到该标头,因此您必须自己在类别中重新声明这些方法。比如:

@interface WebView (Zoom)
- (IBAction)zoomPageIn:(id)sender;
- (IBAction)zoomPageOut:(id)sender;
- (IBAction)resetPageZoom:(id)sender;
@end

另一种选择是在编辑器中的 html 元素上设置 CSS zoom 属性。您可以在标记 (<html style="zoom: 1.5">) 或 JavaScript (document.documentElement.style.zoom = "1.5") 中执行此操作。这不需要使用任何私有 API。

【讨论】:

  • [_webview stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.zoom = \"0.5\""];是最好的解决方案。
  • 如果 webview 禁用了 Javascript,则使用 stringByEvaluatingJavascript 将不起作用。因此,添加一个类别将是一个更好的选择。
猜你喜欢
  • 2011-01-12
  • 2011-09-04
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
相关资源
最近更新 更多