Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cocoa webview和透明窗口问题_Javascript_Objective C_Macos_Cocoa_Webview - Fatal编程技术网

Javascript Cocoa webview和透明窗口问题

Javascript Cocoa webview和透明窗口问题,javascript,objective-c,macos,cocoa,webview,Javascript,Objective C,Macos,Cocoa,Webview,我在这里制作了一个简单的应用程序:除夕夜-我的第一个可可应用程序 第一个问题是午夜计数器(实际上是网络视图)没有正确缩放。您可以将项目加载到Xcode,并尝试使用Cmd+Shift+Plus/减号前后缩放。它只放大一步(通过从AppWindow.m调用的JavaScriptzoom()),太快,无法缩小。我不明白为什么,有什么想法吗 第二个问题是,当您用鼠标在webview中拖动时,很容易通过它进行单击——将整个窗口发送到后台——只要用户不小心在字符之间单击。这是由于透明度所需的[窗口设置不透明

我在这里制作了一个简单的应用程序:除夕夜-我的第一个可可应用程序

第一个问题是午夜计数器(实际上是网络视图)没有正确缩放。您可以将项目加载到Xcode,并尝试使用Cmd+Shift+Plus/减号前后缩放。它只放大一步(通过从
AppWindow.m
调用的JavaScript
zoom()
),太快,无法缩小。我不明白为什么,有什么想法吗

第二个问题是,当您用鼠标在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个问题应在邮件中处理。他们没有关系;)我回答了第二个问题,因为标题也是这么说的。我修改了答案,但你还是应该把问题分开