将document.write(screen.height)转换为数字在ColdFusion中的方法?

3

我正在使用以下代码获取屏幕高度:

<CFSET rheight = "<script>document.write(screen.height);</script>">

rheight的值为768,这是正确的。

但是当我执行以下操作时:-:

<CFSET sheight = rheight / 4>

我收到以下错误:
值document.write(screen.height)无法转换为数字。
目的是在不重新加载页面的情况下获取屏幕高度的数字格式。

1
JavaScript 不在服务器上运行,即使它能够运行,你最多只能获取服务器的 screen.height - Esailija
@Esailija 我知道这个问题。我正在使用的代码可以获取屏幕大小,但返回的是字符串格式。我的问题是,如何将这个字符串转换为数字。 - Aman Kejriwal
如果是这种情况,并且您正在客户端执行此操作,请删除所有服务器端内容,因为那时它是无关的。 - Esailija
如果你的“真正”的问题听起来像“如何获取屏幕宽度并将其传递给ColdFusion”,那么你可以使用JavaScript获取它,并通过AJAX请求发送回服务器。 - Sergey Galashyn
@Sergii 正是我想要的!!!但迄今为止,我在 AJAX 上一直没有成功:( - Aman Kejriwal
@AmanKejriwal 好的,这是另一个问题的主题。无论如何,我建议您描述您正在尝试实现的整个过程,例如这个值将如何被使用。这将有助于其他人理解您的任务并提供更具体的答案。 - Sergey Galashyn
1个回答

7

有多种方式可以实现这个目标:

不使用 AJAX

如果不使用任何 AJAX 请求,您可以使用以下代码实现所需的结果(已在 CF 9.0.2 和 CF10 中进行测试):

<cfset rheight = "
    <script type='text/javascript' 
        src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'>
    </script>
    <script>
    $(document).ready(function() { 
        $('input.screenHeight').val(screen.height);
        alert($('input.screenHeight').val() / 4);
    })
    </script>">

<cfhtmlhead text="#rheight#" />

<input type="text" class="screenHeight" />

在这个例子中,我们创建了一个字符串变量,其中包含对jQuery库和您的自定义代码以获取屏幕高度的引用。
我们将把高度设置为文本输入框的值。然后我们可以提取该值并将其转换为数字。您也可以在将值放入输入框之前进行转换,如下所示:
$('input.screenHeight').val(screen.height/4);

使用cfhtmlhead标记将字符串变量添加到文档头部:

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ae9.html

这仅适用于原始页面视图。如果您需要在页面更改或响应式设计布局更改后获取尺寸,则需要运行AJAX请求以返回屏幕尺寸。

无需CFML

当然,您完全不需要使用ColdFusion。您可以仅通过JavaScript获得相同的数字转换:

<script type='text/javascript'     
    src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'>
</script>
<script type='text/javascript'>
    var getScreenHeight = function() {
        return screen.height;
    }

    $(document).ready(function() { 
    var screenheight = getScreenHeight();
    console.log(screenheight/4);
    })
</script>

然而,看起来您需要能够在ColdFusion中保留屏幕高度响应的值,如下所示:

使用AJAX和CFML

修改上面的JavaScript示例,我们可以创建一个AJAX请求将屏幕高度值发布到一个新的.cfm页面:

<script type='text/javascript'>
var getScreenHeight = function() {
    return screen.height;
}

$(document).ready(function() { 
    var screenheight = getScreenHeight();

$.get("screensize.cfm",
    { screenheight: screenheight },
    function(data) {
        console.log('screen height has been set in the session scope: ' + data);
    }
)
})
</script>

在最基本的情况下,screensize.cfm文件可能包括以下内容:
<cfsetting showdebugoutput="false" />
<cfparam name="URL.screenheight" type="numeric" default="800" />

<cfset session.screenheight = URL.screenheight />

<cfoutput>#session.screenheight#</cfoutput>

假设您的应用程序已启用会话管理,这将把您发送的值放在SESSION范围中,供整个应用程序使用。

这里需要记住的一件事是,在刷新之前,SESSION范围中的值对原始调用页面(发出AJAX请求的页面)不可用。

希望这能帮到您。


很高兴能帮忙,我的荣幸 :) - Matt Gifford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接