首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问网页中的基本JSIL库(从C#)?

如何访问网页中的基本JSIL库(从C#)?
EN

Stack Overflow用户
提问于 2017-05-26 19:47:31
回答 1查看 413关注 0票数 9

我正试着从JSIL开始。据我所知,我已经按照指示行事了。我有一个非常基本的带有代码的C#虚拟项目:

代码语言:javascript
复制
namespace TestLib
{
    public class MagicType
    {
        public int Multiply(int x, int y)
        { // test instance method
            return x * y;
        }
        public static int Add(int x, int y)
        {// test static int method
            return x + y;
        }
    }
}

我用jsilc编译了它,并创建了一个网站,它与jsil脚本一起托管。我的html初始化如下:

代码语言:javascript
复制
<script type="text/javascript">
    var jsilConfig = {
        libraryRoot: '/js/jsil/',
        scriptRoot: '/js/testlib/',
        manifestRoot: '/js/testlib/',
        manifests: ['TestLib.dll'] // gets as far as Loading '/js/testlib/TestLib.dll.manifest.js'...
                                   // which is 200 / OK
    };
    var asm = null;
    var runMain = function () { // doesn't get invoked
        console.log('> main');
        asm = JSIL.GetAssembly("TestLib", true); // (executed outside method) returns a stub with no content
        console.log('< main');
    };
</script>
<script src="/js/jsil/jsil.js"></script>

但是..。我不能进入图书馆。控制台输出指示它正在加载:

代码语言:javascript
复制
Loading '/js/testlib/TestLib.dll.manifest.js'...

这是一个200的OK。但是,我不能访问它。如果我跑:

代码语言:javascript
复制
var asm = JSIL.GetAssembly("TestLib", true);

然后我把一个存根拿回图书馆,但里面没有任何东西。有一个asm.$typesByName,但它是一个空对象。我想要做的(看到它的工作)是调用MultiplyAdd方法。

所以:我错过了什么?我的目的是托管一个可以通过js访问的转置库,据我所知,这是可能的。我就是不能让它起作用。我在这里上传了我的整个测试项目:https://github.com/mgravell/jsilfun

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-26 20:36:13

缺少的部分是JSIL的浏览器层分两个阶段执行加载:引导程序(已成功加载并加载了清单)和浏览器支架(设置DOM接口并实际执行已加载的程序集)。这分两个阶段进行,因为很多事情都是异步的,在实际运行所有代码之前,您可能有理由自己加载其他程序集或执行其他工作。

浏览器支架公开了一个名为onLoad (是的,对不起)的函数,您可以调用该函数来执行第二阶段。这些示例都是用<body onload="onLoad()">或类似的方法来实现的,但是您可以任意调用它。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44209154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档