精华内容
下载资源
问答
  • 需要安装 open in browser...此时在html文件右键 选 Open In Default Browser 可默认浏览器打开 选Open In Other Browser 可其他浏览器打开 本文参考这篇文字https://juejin.im/post/5cb87c6e6fb9a068a...

    需要安装 open in browser插件

    在商店搜索open in browser 点击第一个 安装

     

     

    此时在html文件中右键

    选 Open In Default Browser 可在默认浏览器打开

    选Open In Other Browser 可在其他浏览器打开

    本文参考这篇文字  https://juejin.im/post/5cb87c6e6fb9a068a03af93a
    原文写的很详尽,好多我还没接触

    展开全文
  • 浏览器运行node.js “基于浏览器的捆绑程序”是一个非常有趣的主题。 例如,我们可以浏览器而不是服务器的nod​​ejs环境编译Webpack代码吗? 这样做的好处是我们不需要服务器的资源来进行编译。 对于此问题有...

    浏览器运行node.js

    “基于浏览器的捆绑程序”是一个非常有趣的主题。

    例如,我们可以在浏览器而不是服务器的nod​​ejs环境中编译Webpack代码吗? 这样做的好处是我们不需要服务器的资源来进行编译。

    对于此问题有不同的解决方案。 例如, codesandbox定义了基于浏览器的编译策略,可用于在浏览器中打包react ,vue等。 也可以很容易地理解,codeandbox是webpack的浏览器版本。

    但是问题是,我们可以在浏览器中执行webpack而不是做一个新的webpack吗? 甚至实现一些基于Webpack的库?

    有一个非常早期的webpack 问题正在讨论 但是这个演示太旧了,无法运行最新版本的webpack。

    我想知道我们是否可以做一个浏览器环境来模拟正在运行的Node.js。 Node.js和Chrome均为v8,并且许多Node.js库代码都可以在Chrome中执行。 此外,我发现了一些很酷的库,例如BrowserFSmemfsrollup-plugin-node- builtins等。这些库可以帮助我们构建此环境。 但是有一个关键模块,Node.js“模块”不可用,我们需要从Node.js对其进行修改。 Node.js支持cjs和esm,但是为简化问题,我暂时仅开发cjs模块。 接下来,组合所有模块并尝试运行最简单的Node.js演示。

    在尝试了其他方法之后,我成功在浏览器中运行了webpack4! 确切地说,您可以在浏览器中运行使用nodebowl运行Node.js库。

    简单: https://nodebowl.com/static/examples/simple.html

    < script src = "../../dist/nodebowl.js" >  </ script >
    < script > 
      const { fs, run } = window .nodebowl;
      fs.writeFileSync( '/foo.js' , `
        module.exports = 1;
      ` );
      fs.writeFileSync( '/index.js' , `
        const num = require('./foo');
        alert(num);
      ` );
      run( '/index.js' );
     </ script >

    Webpack: https ://nodebowl.com/static/examples/webpack.html在此示例中,浏览器将下载一个webpack node_modules,然后在浏览器中运行webpack的编译器。

    < script src = "../../dist/nodebowl.js" >  </ script >
    
    < h1 id = "loading" > install webpack node_modules... please wait... </ h1 >
    < button onclick = "compile()" id = "compile" style = "display: none;" > click, compile webpack </ button >
    < div >
      < p > /app/src/index.js </ p >
      < textarea id = "index" style = "width: 600px;height: 100px;" >
    import foo from './foo';
    console.log(foo);
      </ textarea >
    </ div >
    
    < div >
      < p > /app/src/foo.js </ p >
      < textarea id = "foo" style = "width: 600px;height: 100px;" >
    import foo from './foo';
    console.log(foo);
      </ textarea >
    </ div >
    
    < div >
      < p > /app/webpack.js </ p >
      < textarea id = "webpack" style = "width: 600px;height: 100px;" >
    const path = require('path');
    const fs = require('fs');
    const webpack = require('webpack');
    
    webpack({
      mode: 'development',
      entry: path.join(__dirname, 'src', 'index.js'),
      output: {
        path: path.join(__dirname, 'dist'),
        filename: 'bundle.js'
      },
    }, (err, stats) => {
    
      if (err || stats.hasErrors()) {
        console.log('error');
        return;
      }
    
      console.log('success');
    
      const bundlePath = path.join(__dirname, 'dist', 'bundle.js');
      const data = fs.readFileSync(bundlePath, 'utf8');
      document.getElementById('bundle').value = data;
      
    });
      </ textarea >
    </ div >
    
    < div >
        < p > /app/dist/bundle.js </ p >
        < textarea id = "bundle" style = "width: 600px;height: 100px;" > </ textarea >
      </ div >
    
    < script > 
      const { fs, run, helpers } = nodebowl;
      /*
        -- app
        ----- src
        -------- index.js
        -------- foo.js
        ----- webpack.js
        ----- node_modules
      */
      fs.mkdirSync( '/app' );
      fs.mkdirSync( '/app/src' );
      // install node_modules
      helpers.installFromZip( 'node_modules.zip' ).then( () => {
        document .getElementById( 'loading' ).style.display = 'none' ;
        document .getElementById( 'compile' ).style.display = 'block' ;
      });
      function compile ()  {
        fs.writeFileSync( '/app/src/index.js' , document .getElementById( 'index' ).value);
        fs.writeFileSync( '/app/src/foo.js' , document .getElementById( 'foo' ).value);
        fs.writeFileSync( '/app/webpack.js' , document .getElementById( 'webpack' ).value);
        
        run( '/app/webpack.js' );
      }
     </ script >

    您也可以访问https://github.com/nodebowl/nodebowl以查看更多代码和示例。

    翻译自: https://hackernoon.com/how-to-run-nodejs-in-a-browser-wc4s32by

    浏览器运行node.js

    展开全文
  • Web 浏览器中运行 applet

    千次阅读 2013-08-30 10:22:13
    要把applet嵌入网页,你得在网页HTML源文件4加上特殊标签,这就能告诉 网页如何装载并运行这个applet。   以前,这个过程非常简单,那时候 Java 本身也很简单,大家都使用相同的技术,浏览器内 部对 Java ...

    要运行这个程序,你必须先把它嵌入某个网页,然后使用支持Java的Web浏览器来观看这

    个网页。要把applet嵌入网页,你得在网页的HTML源文件4中加上特殊标签,这就能告诉

    网页如何装载并运行这个applet。

     

    以前,这个过程非常简单,那时候 Java 本身也很简单,大家都使用相同的技术,浏览器内

    部对 Java 的支持也相同。那时,只需在网页里加入非常简单的 HTML 代码即可,像这样:

     

    <appletcode=Applet1 width=100 height=50>

    </applet>

     

    后来就是浏览器和语言的激烈争斗,最终我们(程序员和类似的最终用户)失败了。不久,

    Sun 认识到我们不能再指望浏览器来支持正确风格的 Java,唯一的解决之道就是提供某种

    符合浏览器扩展机制的插件。通过使用扩展机制(为了获得竞争优势,浏览器的提供商不

    会在不破坏所有第三方扩展的情况下禁止这个功能),Sun 得以保证 Java 技术不会被竞

    争对手提供的浏览器拒之门外。

     

    对于 InternetExplorer,扩展机制就是ActiveX 控件;对于 Netscape,扩展机制是

    plug-in。在你的 HTML 代码中,你必须提供二者都支持的标签。好在你能使用 JDK 附带

    的 HTMLconverter 工具来自动生成必要的标签。在使用 HTMLconverter 工具对前面的

    applet 标签进行处理之后,以下就是对于 Applet1 所得到的最简单的 HTML 页面代码:

     

    <!--"CONVERTED_APPLET"-->

    <!-- HTMLCONVERTER -->

    <OBJECT 

        classid = "clsid:CAFEEFAC-0014-0001-0000-ABCDEFFEDCBA"

      codebase =

    "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1-

    windows-i586.cab#Version=1,4,1,0"

        WIDTH = 100 HEIGHT = 50 >

        <PARAM NAME = CODE VALUE = Applet1 >

        <PARAM NAME = "type" VALUE =

    "application/x-java-applet;jpi-version=1.4.1">

        <PARAM NAME = "scriptable" VALUE = "false">

        <COMMENT>

          <EMBED 

              type =

    "application/x-java-applet;jpi-version=1.4.1"

              CODE = Applet1

              WIDTH = 100

              HEIGHT = 50  

              scriptable =     false

              pluginspage =

    "http://java.sun.com/products/plugin/index.html#download">

              <NOEMBED>

              </NOEMBED>

          </EMBED>

        </COMMENT>

    </OBJECT>

    <!--

    <APPLET CODE =Applet1 WIDTH = 100 HEIGHT = 50>

    </APPLET>

    -->

    <!--"END_CONVERTED_APPLET"-->

     

    其中有些行太长了,要换行处理才能完整显示。本书源程序(可以从www.BruceEckel.com

    下载)中的代码可以正常工作,不用担心其换行是否正确。

     

    code 值给出了 applet 所在的.class 文件的名称。width 和 height 指定了 applet 的初始

    大小(和以前一样,以像素为单位)。applet 标签中还可以加入其它属性:在互联网上查

    找其它.class 文件的地址(codebase),对齐方式(align),使 applet 之间能够相互通

    讯的特殊标识符(name),以及 applet 能够读取的参数信息。参数具有如下形式:

     

    <param name="identifier" value = "information">

     

    而参数的数量并没有限制。

     

    本书的源代码包(可以从www.BruceEckel.com免费下载)中为书中的每一个applet都提

    供了HTML页面,因此,有很多applet标签的例子,可以从本章源代码对应的index.html

    文件中找到。至于把applet嵌入网页的细节部分,你可以在java.sun.com上查到完整且最

    新的说明。


    展开全文
  • 让C代码在浏览器中运行——WebAssembly入门介绍

    万次阅读 多人点赞 2017-06-16 22:38:55
    使用WebAssembly,我们可以在浏览器中运行一些高性能、低级别的编程语言,可用它将大型的C和C++代码库比如游戏、物理引擎甚至是桌面应用程序导入Web平台。 截至目前为止,我们已经可以Chrome、Firefox使用Web...

    WebAssembly作为一种新兴的Web技术,相关的资料和社区还不够丰富,但其为web开发提供了一种崭新的思路和工作方式,未来是很有可能大放光彩的。

    使用WebAssembly,我们可以在浏览器中运行一些高性能、低级别的编程语言,可用它将大型的C和C++代码库比如游戏、物理引擎甚至是桌面应用程序导入Web平台。

    截至目前为止,我们已经可以在Chrome、Firefox中使用WebAssembly,Edge和Safari对它的支持也基本完成。这意味着很快,就能在所有流行的浏览器中运行wasm了。

    在这篇文章中,我们将会演示如何将简单的C代码编译为wasm,并将其包含在网页中。在此之前,我们先来直观的了解下WebAssembly是如何工作的。

    WebAssembly是如何工作的?

    这里不涉及过多技术性的问题。我们知道,在今天的浏览器中,JavaScript是在虚拟机(VM)中执行的,该虚拟机能够最大化地优化代码并压榨每一丝的性能,这也使得JavaScript称为速度最快的动态语言之一。但尽管如此,它还是无法与原生的C/C++代码相媲美。所以,WebAssembly就出现了。

    Wasm同样在JavaScript虚拟机中运行,但是它表现得更好。两者可以自由交互、互不排斥,这样你就同时拥有了两者最大的优势——JavaScript巨大的生态系统和有好的语法,WebAssembly接近原生的表现性能。

    大多数程序员会选择使用C语言来编写WebAssembly模块,并将其编译成.wasm文件。这些.wasm文件并不能直接被浏览器识别,所以它们需要一种称为JavaScript胶接代码(glue code,用于连接相互不兼容的软件组件,详见:http://whatis.techtarget.com/definition/glue-code)的东西来加载。

    WebAssembly工作原理

    随着未来WebAssembly框架和本地wasm模块支持的发展,这一过程可能会有所缩短。

    开发前准备

    编写WebAssembly需要不少的工具,但作为一个程序员,下面的工具你应该大部分都已经有了。

    1、支持WebAssembly的浏览器,新版的Chrome或者Firefox均可(可以在此查看各个浏览器对某项内容的支持情况:http://caniuse.com/#feat=wasm)。

    2、C到WebAssembly的编译器,推荐使用Emscripten(https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html),安装这个工具费时费力费空间,但没办法,这是目前为止最好的选择,请仔细阅读安装说明,需占用约1GB的硬盘空间。

    3、一个C编译器/开发环境,比如Linux下的GCC,OS X下的Xcode,Windows下的Visual Studio。

    4、一个简单的本地web服务器,Linux/OS X下使用python -m SimpleHTTPServer 9000命令即可,Windows下可安装IIS服务。

    一、编写C代码

    下面我们编写一个非常简单的C语言例子,它将会返回1-6的随机数,在你所使用的工作目录下,创建一个dice-roll.c文件。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <emscripten/emscripten.h>
    
    // 一旦WASM模块被加载,main()中的代码就会执行
    int main(int argc, char ** argv) {
        printf("WebAssembly module loaded\n");
    }
    
    // 返回1-6之间的一随机数
    int EMSCRIPTEN_KEEPALIVE roll_dice() {
        srand ( time(NULL) );
        return rand() % 6 + 1;
    }

    当我们将其编译为wasm并且在浏览器中加载时,main函数会自动执行,其中的printf将会被翻译成console.log

    我们想要roll_dice函数能够在JavaScript中随时调用,为此,我们需要在函数名前添加EMSCRIPTEN_KEEPALIVE标记以告诉Emscripten我们的意图。

    二、将C编译为WebAssembly

    现在我们已经有了C代码,接下来需要将它编译成wasm,不仅如此,我们还需要生成相应的JavaScript胶接代码以便能够真正运行起来。

    这里我们必须使用Emscripten编译器,你会发现有大量的命令行参数和编译方法可选,经过实践,我们找到了下面这个最友好最实用的组合:

    emcc dice-roll.c -s WASM=1 -O3 -o index.js

    各个参数含义如下:

    • emcc——代表Emscripten编译器;
    • dice-roll.c——包含C代码的文件;
    • -s WASM=1——指定使用WebAssembly;
    • -O3——代码优化级别,3已经是很高的级别了;
    • -o index.js——指定生成包含wasm模块所需的全部胶接代码的JS文件;

    需要注意的是,尽管上面的emcc选项能够很好地应对我们这个例子,但在更复杂的情况下,好需要使用不同的方法,可查看官方文档了解更多内容:http://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html#emccdoc

    三、在浏览器中加载WebAssembly代码

    现在我们将回到熟悉的web开发领域,在当前文件夹创建index.html文件,引入相关的js文件与CSS文件。

    <!DOCTYPE html>
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>WebAssembly 示例</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="CSS/styles.css">
        <link rel="stylesheet" href="CSS/dice-1.0.min.css">
      </head>
      <body>
    
        <div class="dice dice-6"></div>
        <span>点击以摇动筛子</span>    
    
        <!-- 引入JavaScript胶节文件 -->
        <!-- 这将会加载WebAssembly模块并运行其main函数 --> 
        <script src="index.js"></script>
    
      </body>
    </html> 

    至此,项目结构已经完整,如下:

    WebAssembly项目结构

    style.css简单设置一下页面样式:

    body {
      padding: 40px;
      font: normal 16px sans-serif;
      display: flex;
      flex-direction: column;
    }
    
    .dice {
      display: block !important;
      font-size: 80px;
      margin: 0 auto 20px;
      cursor: pointer;
    }
    
    span {
      display: block;
      margin: 0 auto;
      color: #333;
    }

    dice-1.0.min.js是来自Github(https://github.com/diafygi/dice-css)的一个微型CSS骰子样式库,包括了1-6的SVG矢量图,可作为内联图标使用,用法与font-awesome和glyphicons相同。其代码如下:

    /*
     * Dice.css v1.0
     * Code - MIT License - https://github.com/diafygi/dice-css
     * Images - Public Domain - https://openclipart.org/detail/105931/sixsided-dice-faces-lio-01
     */
    .dice{display:inline-block;min-height:1em;padding-left:1em;background-size:1em;background-repeat:no-repeat;}
    .dice-1{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cg transform='translate(113.25%2C-494.1)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-406.5%2C374.7)'%3E%3Crect x='588' y='240.4' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(337.5%2C87.5)' cx='325' cy='227.4' r='12.5' style='fill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E ");}
    .dice-2{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cstyle%3E.s0%7Bfill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000%3B%7D%3C%2Fstyle%3E%3Cg transform='translate(109.9%2C-505.1)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-415.6%2C485.6)'%3E%3Crect x='613' y='40.4' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(326.5%2C-148.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(398.5%2C-76.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E ");}
    .dice-3{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cstyle%3E.s0%7Bfill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000%3B%7D%3C%2Fstyle%3E%3Cg transform='translate(84.9%2C-515.5)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-290.6%2C514.9)'%3E%3Crect x='413' y='2.9' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(126.5%2C-186)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(198.5%2C-114)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(162.5%2C-150)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E ");}
    .dice-4{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cstyle%3E.s0%7Bfill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000%3B%7D%3C%2Fstyle%3E%3Cg transform='translate(90.7%2C-499.7)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-302.7%2C367.8)'%3E%3Crect x='425.5' y='265.4' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(139%2C76.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(139%2C148.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(211%2C76.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(211%2C148.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E ");}
    .dice-5{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cstyle%3E.s0%7Bfill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000%3B%7D%3C%2Fstyle%3E%3Cg transform='translate(89.2%2C-510.5)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-194.9%2C372.3)'%3E%3Crect x='213' y='277.9' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(-73.5%2C89)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-73.5%2C161)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-1.5%2C89)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-1.5%2C161)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-37.5%2C125)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E ");}
    .dice-6{background-image: url("data:image/svg+xml,%3Csvg xmlns='http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg' version='1.1' viewBox='0 0 76.5 76.5' height='21.6' width='21.6'%3E%3Cstyle%3E.s0%7Bfill%3A%23000%3Bstroke-width%3A3%3Bstroke%3A%23000%3B%7D%3C%2Fstyle%3E%3Cg transform='translate(86.2%2C-500.6)'%3E%3Cg transform='matrix(0.5%2C0%2C0%2C0.5%2C-98.2%2C356.2)'%3E%3Crect x='25.5' y='290.4' width='150' height='150' ry='50' rx='50' style='fill%3A%23fff%3Bstroke-width%3A3%3Bstroke%3A%23000'%2F%3E%3Ccircle transform='translate(-261%2C101.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-261%2C173.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-261%2C137.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-189%2C101.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-189%2C173.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3Ccircle transform='translate(-189%2C137.5)' cx='325' cy='227.4' r='12.5' class='s0'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");}

    由于跨源问题的存在,我们需要一个本地服务器才能运行这个项目。在Linux/OS X系统中,可以在项目目录下运行如下命令:

    python -m SimpleHTTPServer 9000

    然后到浏览器中,打开localhost:9000以查看这个小应用。按F12打开控制台,即可看到我们在C代码中使用printf输出的问候语:

    Chrome控制台

    四、调用WebAssembly函数

    最后一步是连接JavaScript与WebAssembly,由于胶接代码的存在(index.js),这项任务变得非常简单,它已经为我们处理好了所有的接线任务。

    在浏览器中处理WebAssembly有一个非常强大的API可以使用,在此我们不会进行深入探讨因为这已经超出了入门的范畴,我们只需要Module接口及其ccall方法这部分即可。该方法允许我们通过函数名从C代码中调用一个函数,然后就向一般的JS函数一样使用就行了。

    var result = Module.ccall(
        'funcName',     // 函数名
        'number',       // 返回类型
        ['number'],     // 参数类型
        [42]);          // 参数

    调用此方法之后,result就将拥有对应C函数的所有功能,除函数名以外的所有参数都是可选的。

    我们也可以使用缩写版:

    // 通过在函数名前添加下划线来调用C函数
    var result = _funcName();

    roll_dice函数无需任何参数,在JavaScript代码中调用十分简单:

    <script>
       // 当HTML dice元素被点击时,其值将会被改变
       var dice = document.querySelector('.dice');
    
       dice.addEventListener('click', function(){
         // 调用C代码中的roll_dice函数
         var result = _roll_dice();
         dice.className = "dice dice-" + result;                   
        });
    </script>

    将上面这段代码添加到index.html末尾,即</body>之前即可。

    此时运行项目,即可看到结果:

    骰子

    总结

    虽然现在WebAssembly还在发展的初期,但从公布的新标准来看,潜力巨大。在浏览器中运行低级语言的能力,将会带来全新的应用程序与web体验,而这,是仅仅通过JavaScript无法使用的。

    诚然,使用WebAssembly在当前阶段还十分繁琐,文档需要分为多个部分,相应的工具也不容易使用,并且还需要JavaScript胶接代码才能使用wasm模块。但随着越来越多的人进入这个平台,所有这些问题都将会被解决。

    令附一些参考资料:

    展开全文
  • HTML网页中插入输入框,输入框内容或代码可点击"运行代码"运行在浏览器看到运行输入框内代码效果。此HTML代码由表单代码textarea和简单JS代码实现。 HTML代码: textarea name="textarea" cols="60" rows=...
  • 让Vue文件直接在浏览器中运行

    千次阅读 2021-02-10 14:31:20
    大家有能力把Webpack学好就用它,学不好或者不想学或者嫌麻烦,就可以用Vue自带的能力在浏览器中直接编译运行.vue文件!!!这样项目开发起来就不用去配置繁琐的Webpack,不用等待Webpack的编译过程。如果想提高运行...
  • 没有配置之前查看网页,需要打开html文件所在位置,右击.html文件,“打开方式”选择相应浏览器打开,才能看到效果。要不断的在浏览器,Notepad++和文件夹之间切换很麻烦,有没有一种比较简单的方法,可以直接...
  • 新建的JSP文件里,谷歌浏览器查看效果。 运行之后出现了如下图这种状况。![图片说明](https://img-ask.csdn.net/upload/201703/09/1489045972_868816.png) ![图片说明]...
  • 快速入门: https://www.cnblogs.com/nxld/p/6566380.html
  • JavaScript似乎与这一切毫不相关,自诞生起相当长一段时间内,这门在浏览器内执行一些简单的校验和互动的脚本语言,是职业程序员看不上眼的玩具。然而,本文就是要谈谈Hacking with JavaScript——以JavaScript来...
  • VScode如何在浏览器中打开html文件

    万次阅读 多人点赞 2018-11-26 10:07:47
    Vscode默认是控制台下查看html文件,对于我们查看和调试都很不方便,那如何在浏览器中打开呢? 1.新建一个HTML文件 2.点击左侧的扩展,打开扩展栏 3.扩展栏的搜索栏输入open in browser,找到open in ...
  • 如果想要编辑HTML之后直接运行,可以 ctrl+shift+p 搜索 Configure Task Runner. 回车之后打开 tasks.json,修改一下: {  "version": "0.1.0",  "command": "explorer",  "windows": {
  • 首先,你得在浏览器里输入要网址: 例如百度或者facebook。 第二步 浏览器查找域名的IP地址(域名就是指输入的网址) 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的...
  • **请教 如何判断H5页面是嵌入App里运行还是在浏览器运行**,不想用userAgent这种方式来判断。 App:有安卓版和苹果版,均是**原生开发**,具体是用什么webview还是用其他的什么技术不能确定。 先前的代码...
  • 一:创建html页面 二:点击左侧的第五个图标:拓展栏,其中输入 open in browser ...六:使用其他浏览器打开html页面,选择自己需要打开的浏览器,单击就可以打开html页面 七:打开页面如下: ...
  • 浏览器打开网页提示:已限制此网页运行脚本和activex 解决方法: 工具 – Internet选项 – 高级标签 – 安全分类下面,找到“允许活动内容我的计算机上的文件中运行*”,勾选它就好了,重启IE就行了 ...
  • VS Code使用浏览器运行html文件

    千次阅读 2019-06-04 09:50:41
    1.添加 open in browser 扩展 2.要展示的html文件,点击右键再选中红线的就可以了,会默认浏览器中展示页面。
  • 浏览器地址栏运行HTML代码(谷歌)

    千次阅读 2016-07-19 22:45:18
    地址栏输入data:text/html,Hello, world! 浏览器会执行你的html代码,效果如下: 如果觉得这个还不有趣还有一个:把浏览器做编辑器用 地址栏输入: data:text/html, 浏览器就变成了编辑器,你可以输入文本内容...
  • vue-cli项目运行之后自动在浏览器打开 目录config——>index.js修改如下设置: autoOpenBrowser: true, 原本是false,改为true即可 PS.更多index.js设置的问题可前往:...
  • 首先,移动端浏览器在后台运行或手机黑屏的情况下页面js是不会执行的,页面有倒计时的情况下问题就出现了,中间离开这段时间的时间差要怎么计算呢?其实这个问题也是很简单,之前钻到牛角尖,非要监听一个浏览器...
  • HTTPS页面里动态的引入HTTP资源,比如引入一个js文件,会被直接block掉的.HTTPS页面里通过AJAX的方式请求HTTP资源,也会被直接block掉的。这样就导致我们的网页没办法正常浏览及点击,问题如下图所示:
  • 我的操作步奏: 1、Eclipse里面写个简单的jsp页面,加入CNZZ统计脚本,启动服务器。 2、浏览器访问。浏览器中访问jsp,CNZZ系统能统计到该次访问。 3、java代码访问。...使网页中的统计代码能执行。
  • 利用浏览器打开html文件时,中文显示乱码,如下是原文件的内容  1 &lt;html&gt; 2 &lt;head&gt; 3 &lt;title&gt;狗熊王&lt;/title&gt; 4 &lt;/head&gt; 5 6 &lt;...
  • 利用JS动态修改单网页web应用微信浏览器中的title 最近做一个微信端项目,主要内容都是采用单页面web,之前做微信端,以营销H5居多,绝大多数也都是单网页,营销H5一般一个标题通吃,修改分享标题的情况比较多,而...
  • sublime 的版本可以通过 Help -> Changelog… 来查看。我这里的版本是sublime3。首先要安装 “View In Browser” 插件。Preferences -> Package ...安装成功后,还是 Package Control,输入 “View In Browser”
  • 使用DockerNginx上运行简单的HTML网页本篇博文介绍的是使用Docker容器Nginx上运行简单的HTML静态网页,实现的步骤如下所示: 一、运行如下命令获取Nginx镜像:docker pull nginx二、运行 docker images 查看...
  • 为什么要在浏览器中运行机器学习算法 应用举例:regression 和 tflearn 的代码比较 1. 什么是 TensorFlow.js TensorFlow.js 是一个开源库,不仅可以在浏览器中运行机器学习模型,还可以训练模型。 具有 GPU ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 245,698
精华内容 98,279
关键字:

如何在浏览器中运行html网页