Javascript Cocoa webview和透明窗口问题
我在这里制作了一个简单的应用程序:除夕夜-我的第一个可可应用程序 第一个问题是午夜计数器(实际上是网络视图)没有正确缩放。您可以将项目加载到Xcode,并尝试使用Cmd+Shift+Plus/减号前后缩放。它只放大一步(通过从Javascript Cocoa webview和透明窗口问题,javascript,objective-c,macos,cocoa,webview,Javascript,Objective C,Macos,Cocoa,Webview,我在这里制作了一个简单的应用程序:除夕夜-我的第一个可可应用程序 第一个问题是午夜计数器(实际上是网络视图)没有正确缩放。您可以将项目加载到Xcode,并尝试使用Cmd+Shift+Plus/减号前后缩放。它只放大一步(通过从AppWindow.m调用的JavaScriptzoom()),太快,无法缩小。我不明白为什么,有什么想法吗 第二个问题是,当您用鼠标在webview中拖动时,很容易通过它进行单击——将整个窗口发送到后台——只要用户不小心在字符之间单击。这是由于透明度所需的[窗口设置不透明
AppWindow.m
调用的JavaScriptzoom()
),太快,无法缩小。我不明白为什么,有什么想法吗
第二个问题是,当您用鼠标在webview中拖动时,很容易通过它进行单击——将整个窗口发送到后台——只要用户不小心在字符之间单击。这是由于透明度所需的[窗口设置不透明:否]
。我希望窗口始终捕获鼠标拖动事件,我该如何做?关于透明窗口中的单击问题
默认行为:窗口管理器允许单击透明部分=>对我们来说不好!:D
所以我们不得不骗他看到不透明的东西:
一步
修改contentView以具有CALayer(在InterfaceBuilder中执行此操作)
2步
不要将主视图设置为内容视图,而是将主视图设置为内容视图的子视图
[[window contentView] addSubview:mainView];//was setContentView call
三步
由于mainView不再是windows contentView,因此无法访问AppWindow.m中的视图
修理
id mainView = [[self.contentView subviews] lastObject];
NoClickWebView *aWebView = [[mainView subviews] lastObject];//used contentView subviews
关于糟糕的缩放。
这里让我们头疼的问题是javascript没有输入:调用zoom+=percent被视为字符串的串联,导致~30.1或3-0.1:p
要修复它,请强制JS始终将其视为浮动:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type='text/css'>
#slider-full-width{
text-align: center;
}
#slider-full-width h2 {
color: #0000CC;
text-shadow: 1px 1px 1px #FFF;
}
</style>
<script type='text/javascript'>//<![CDATA[
function dummy(text) {
document.getElementById("counter").innerHTML = text;
}
function zoom(percent) {
var zoomText = document.getElementById("counter").style.zoom;
var zoom = parseFloat(zoomText);
zoom += parseFloat(percent);
document.getElementById("counter").style.zoom = zoom;
}
//]]>
</script>
</meta>
</head>
<body>
<div id="slider-full-width">
<h2 id="counter" style="zoom: 3.0"></h2>
</div>
</body>
</html>
#滑块全宽{
文本对齐:居中;
}
#滑块全宽h2{
颜色:#0000CC;
文本阴影:1px 1px 1px#FFF;
}
//
请注意,您没有将该项目提交给githubworks,不过很好:谢谢,我将您的解决方案推送到github,它解决了第一个问题;但是当缩放时,我现在遇到一个异常:Countdown[…]-[NSView windowScriptObject]:无法识别的选择器发送到实例
yes,因为主视图不再是内容视图。在应用程序窗口类`id mainView=[[self.contentView子视图]lastObject]中修复它;NoClickWebView*aWebView=[[mainView子视图]lastObject]`2个问题应在邮件中处理。他们没有关系;)我回答了第二个问题,因为标题也是这么说的。我修改了答案,但你还是应该把问题分开