You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中正确接收C# WPF程序传递的坐标参数

问题原因

你之前的方案存在两个核心错误,导致参数无法正常传递:

  • <%=coords%> 是ASP.NET WebForm类框架的服务端模板语法,只有HTML经过对应服务端引擎渲染输出时才会被替换为实际值。你直接本地打开静态HTML文件时,没有服务端解析环节,浏览器会把这段标记当成普通字符串处理,自然不会解析出坐标值。
  • 你把坐标字符串作为ProcessStartInfo的参数传递,这个参数是传给浏览器可执行程序本身的启动参数,网页内的JavaScript运行在沙箱环境中,没有权限读取浏览器进程的启动参数,根本拿不到你传的值。
可行实现方案

最简便的方式是通过URL查询参数传递坐标,静态HTML无需搭建服务端即可通过原生JS读取参数,具体修改如下:

1. 修改C#端传参逻辑

不要把坐标作为浏览器进程启动参数传递,直接把坐标拼接在目标HTML的URL尾部,作为查询参数传入:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    // 坐标拼接为URL查询参数,格式为 ?lat=纬度值&lon=经度值
    string targetUrl = $"{e.Uri.AbsoluteUri}?lat={coord1}&lon={coord2}";
    Process.Start(new ProcessStartInfo(targetUrl));
    e.Handled = true;
}

2. 修改JS端参数读取逻辑

移除无效的模板语法,直接通过原生API读取URL上携带的坐标参数,传入地图初始化逻辑即可:

<script type='text/javascript'>
    var map;
    // 通用查询参数读取方法,支持设置默认值兜底
    function getUrlParam(paramName, defaultValue) {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.has(paramName) ? parseFloat(urlParams.get(paramName)) : defaultValue;
    }

    function GetMap() {
        // 读取传入的坐标,未成功读取时使用原默认值55、0
        const latitude = getUrlParam('lat', 55);
        const longitude = getUrlParam('lon', 0);

        map = new Microsoft.Maps.Map('#myMap', {
            center: new Microsoft.Maps.Location(latitude, longitude)
        });
        // 其余原有地图逻辑保持不变
        ...
    }
</script>
注意事项
  • 上述代码使用的URLSearchParams是浏览器原生API,所有现代浏览器(包括WPF中常用的WebView2内核、Chrome、Edge、Firefox)均已支持,无需引入额外依赖。如果需要兼容IE等老旧浏览器,替换为正则匹配查询字符串的实现即可。
  • 如果传递的坐标存在特殊格式需求,可以在拼接URL时对参数做URL编码处理,避免特殊字符导致URL解析异常。

内容的提问来源于stack exchange,提问作者Marcus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 03:06:22