所以我意识到新的 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