【问题标题】:Am I limited to value types when using AddWebAllowedObject?使用 AddWebAllowedObject 时是否仅限于值类型?
【发布时间】:2016-01-18 09:21:29
【问题描述】:

在我的 WebView 中使用 AddWebAllowedObject 向 Javascript 公开 C# 组件时,函数参数和返回类型都需要是值类型吗?还是可以传递对象结构?

【问题讨论】:

    标签: c# win-universal-app uwp


    【解决方案1】:

    不,您不仅限于值类型。

    您可以参考official example。这是一个 JS 项目,但你可以在 c# 项目中做同样的事情。以下是您可以参考和搜索的兴趣代码:

    调用 AddWebAllowedObject 的代码:

    document.getElementById("webview").addWebAllowedObject("winRTSharedObject", winRTSharedObject);
    

    HTML 代码:

    <body class="win-type-body">
        <div id="myDiv"></div>
        <script>
        if (window.winRTSharedObject !== undefined) {
        winRTSharedObject.checkPrimesInRange();
        } else {
        document.getElementById("myDiv").innerText = "\'winRTSharedObject\' object doesnt exists";
        }
        </script>
    </body>
    

    c++ winrt组件中的代码:

    WinRTSharedObject::WinRTSharedObject()
    {
    }
    
    void WinRTSharedObject::CheckPrimesInRange()
    {
        vector<int> numsVector;
    
        for (int num = startNumber; num <= endNumber; num++)
        {
            if (IsPrime(num))
            {
                numsVector.push_back(num);
                NotifyAppOfPrimes(num);
            }
        }
    
        int* numsArray = &numsVector[0];
        //return numsArray;
    }
    

    【讨论】:

    • 这些示例中的所有参数(setStartNumber、setEndNumber、NotifyAppOfPrimes)看起来都是值类型。
    • 你想传递给c#组件什么样的对象或结构?你能给我看个样品吗?如果想让c#组件能够直接理解js复杂的对象或结构,那是不可能的。我们能做的就是将它们解析为您在 c# 中所期望的对象或结构。
    • 你试过动态对象的参数吗?然后您可以使用该对象的值来实例化您预定义的 c# 类。
    • 我想知道是否有办法传递一个简单的 JSON 对象并将其映射到具有匹配属性的 C# 对象,反之亦然。听起来答案是否定的,您只能传递字符串、整数等,然后将它们重新构建到接收端的对象中。
    • 对我来说,是的。 JSON 是文本格式。对于 c#,它是字符串。不同之处在于,如果您将 json 格式字符串分配给 javascript 对象,它就知道它是 JSON,因为 JSON 是 javascript 的子集。但是对于c#,我们需要序列化或者反序列化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    相关资源
    最近更新 更多