3

所以我意识到新的 CF11 移动功能收到了一些非常混合的评论,但我想尝试一下,看看我是否可以将它们用于一些非常简单的设备检测,但是我无法得到任何实际工作。

例如,我正在查看cfclientsettings的文档,特别是页面上“设备检测”标题下的第一个示例。这是供参考的代码(我对其进行了一些格式化以确保在此处易于阅读):

<cfClientSettings detectDevice=true /> 
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfset evalStr = "document.getElementById('canvas').innerHTML='" & cfclient.canvas & "'">
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null)">Show canvas support</button>

创建一个新的 .cfm 页面并添加此代码会在页面上生成文本和按钮,但单击该按钮会在 Chrome 中引发 JS 错误:“未捕获的函数签名是 invokeCFClientFunction(functionName [, arg1, arg2, arg3, ... ]、successCallback、failureCallback)。functionName、successCallback和failureCallback是必填项。如果没有successCallback或failureCallback,可以传入null作为值。

好吧,不是很好。所以我检查了更多文档,并决定在 invokeCFClientFunction() 调用中添加另一个空参数来修复丢失的回调。这至少纠正了 JS 错误,但现在单击按钮时什么都没有发生。

所以经过一番大惊小怪,我得到了以下代码,它仍然不起作用,但似乎更接近:

<cfClientSettings detectDevice=true />
<cfclient>
    <cffunction access="public" name="showCanvasSupport" returntype="void">
        <cfscript>
            document.getElementById('canvas').innerHTML=cfclient.canvas;
        </cfscript>
    </cffunction>
</cfclient>

Canvas support -<b id="canvas"></b><br>
<button onclick="invokeCFClientFunction('showCanvasSupport',null,null)">Show canvas support</button>

因此,当您单击按钮时,此代码将 canvas 元素的 innerHTML 设置为“未定义”。惊人的。

老实说,我一直在尝试我能找到的所有使用 cfclient 的示例,但没有一个有效。有什么我想念的秘密吗?我有一个偷偷摸摸的怀疑,如果我没有在 CFBuilder 中创建一个“移动项目”,那么这些东西不起作用?如果是这样,那太愚蠢了,他们并没有在文档中真正说明这一点。

最后,我要做的只是简单地使用 cfclient 进行一些基本的设备检测,并抓取浏览器/设备的宽度来进行一些基本的媒体查询样式检测,就像在“使用媒体查询”部分中一样cfclientsettings文档的。我只想获取宽度,然后根据它设置一个会话变量。

我正在使用 IIS 在我的 Win7 机器设置上运行完全修补的 CF11 开发人员版本。欢迎任何和所有的支持。

Adobe 论坛上的交叉帖子:https ://forums.adobe.com/thread/1929387

4

2 回答 2

2

在我的键盘上敲了一会儿之后,我已经让 cfclient 范围工作了。

我终于在文档中找到了这个页面:设备检测

乍一看,这个页面似乎与cfclientsettings文档页面几乎相同,甚至具有相同的代码示例。

但是,cfclientsettings文档使用这样的范围:

cfclient.canvas

设备检测文档页面是这样写的:

cfclient.properties.canvas

繁荣。当然,这就是全部。真是浪费时间。如果您在其中添加“.properties”,所有 cfclient 范围的变量都可以正常工作。

我仍然不确定cfclientsettings文档是否完全错误,或者它是否在不同的上下文中引用它。我肯定会在这一点上添加评论。

(此外,在两个 doc 版本上,此示例的 JavaScript 仍然失败,所以就是这样。)

希望这对想要进行简单的 ColdFusion 客户端设备检测的人有所帮助。

于 2015-08-18T12:56:34.277 回答
1

让我先声明我从未使用过 cfclient 并且我只是转发我在网上找到的文档以供使用。评论太长了。

你说:

我有一个偷偷摸摸的怀疑,如果我没有在 CFBuilder 中创建一个“移动项目”,那么这些东西不起作用?如果是这样,那太愚蠢了,他们并没有在文档中真正说明这一点。

我认为他们确实在文档中说明了这一点。这是我发现的。在客户端 CFML(用于移动开发)文档的开头,它指出:

开始之前 – 要试用本文档中提供的示例,您需要设置 ColdFusion 移动开发环境。请参阅配置开发环境

我不会在这里重复所有信息,因为它相当重要,但是配置开发环境页面提到您必须安装 ColdFusion Server 11,安装 ColdFusion Builder,然后在 Builder 中创建一个“ColdFusion Mobile Project”来帮助您.

但是,该页面还指出,您可以按照迁移现有项目下的步骤自动转换现有的 ColdFusion 项目,其中您从 ColdFusion Builder 中将“应用 CF Mobile Nature”到项目中。这可能是您缺少的部分。

我认为,如果您通读我引用的文件,它可能会让您继续前进。这里还有一个链接到他们的构建移动应用程序文档,其中包含整个过程的概述。

于 2015-08-18T12:15:20.213 回答