标签: embedded-v8

适用于V8的JavaScript标准库

在我的应用程序中,我允许用户使用JavaScript编写插件.我为此目的嵌入了V8.问题是开发人员不能使用HTTP,套接字,流,定时器,线程,Crypotography,单元测试等等.

我搜索了Stack Overflow,发现了node.js. 它的问题在于您实际上可以创建 HTTP服务器,并启动进程以及我不想允许的更多内容.另外,node.js有自己的环境(./node script.js),你不能嵌入它.它不支持Windows - 我需要它完全跨平台.如果这些问题可以解决,那就太棒了:)但我也对其他框架持开放态度.

有任何想法吗?

谢谢!

javascript c++ v8 node.js embedded-v8

8
推荐指数
1
解决办法
1568
查看次数

Perl:Javascript :: V8模板 - 来自perl

寻找像HTML :: Mason(或Mason)这样的模板引擎,所以将源组件"编译"成perl代码,而不是perl-code将"编译"组件到JavaScript代码中并在用Javascript :: V8运行/执行它们之后perl模块.

动机:寻找安全模板语言的解决方案,可以在不影响服务器安全性的情况下编辑用户.JavaScript是全功能语言,因此使用它可能比TT或类似的某些"迷你语言"更好/更快.对我来说最好的是扩展(重写)Mason编译成Joose/JavaScript而不是Moose/Perl.;)

是的,想要使用Javascript :: V8从perl执行此操作,因为这种方式可以通过Javascript :: V8 $ context-> bind_function以非常安全的方式提供所有perl的功能.

问题:

  • 有人知道吗?(在CPAN中什么也没找到)......

编辑:在梅森你可以写例如

% #perl version
% my(@list) = qw(Jane John Doe);
<ul> 
% foreach my $item (@list) { 
  <li><% uc($item) %></li> 
% } 
</ul>
Run Code Online (Sandbox Code Playgroud)

很高兴有可能在JS中编写上述内容,例如:

% //javascript version
% var list = ["Jane", "John", "Doe"];
<ul> 
% for(var i in list) {
  <li><% perl_uc($list[i]) %></li>
  <!-- the "perl_uc" is the real perl uc() what is binded
       with Javascript::V8::bind_function(perl_uc => sub { …
Run Code Online (Sandbox Code Playgroud)

perl v8 mason joose embedded-v8

8
推荐指数
1
解决办法
845
查看次数

访问V8引擎的抽象语法树

对于给定的JavaScript代码,是否可以访问v8引擎的AST?我正在使用V8引擎开发JavaScript静态分析器.

javascript interpreter v8 abstract-syntax-tree embedded-v8

8
推荐指数
1
解决办法
3369
查看次数

如何为Windows编译尽可能小的V8库?

我正在为学校制作游戏引擎,我想使用谷歌的V8来允许在引擎中使用JavaScript脚本.该引擎是使用Visual Studio 2013编写的,并且由于最终游戏不得超过50MB,因此我希望尽可能减小V8文件大小的影响.

通过互联网了解如何使用V8进行操作,我遇到了一系列关于V8的教程,其中包含一个针对V8的预编译.lib文件.但是,它已经四岁了.我假设自己构建一个更新的版本会提高性能并添加功能,所以我昨天花了很多时间来讨论V8构建过程,并最终找到了如何为Visual Studio编译V8:

  1. 安装Google的"软件仓库工具"
  2. fetch v8

这为我提供了生成V8 Visual Studio解决方案所需的一切,当我编译它时,它可以工作,并生成.lib和.dll文件.但是,当我尝试创建一个测试解决方案并将这些库链接到它时,它令人难以置信的混乱.

构建过程生成以下LIB文件:

  • cctest.lib
  • gmock.lib
  • gtest.lib
  • icui18n.lib
  • icuuc.lib
  • mksnapshot.lib
  • unittest.lib
  • v8.lib
  • v8_base.lib
  • v8_libbase.lib
  • v8_libplatform.lib
  • v8_nosnapshot.lib
  • v8_snapshot.lib

以下DLL:

  • icudt.dll
  • icui18n.dll
  • icuuc.dll
  • v8.dll

在昨天的某个时刻,我包含了许多库(我认为它是v8,v8_base和v8_snapshot)并将所有DLL复制到我项目的输出目录中,并最终起作用.但是,正如我上面所说,我需要V8的文件大小影响尽可能小.我不需要i18​​n支持,所以有没有一种方法可以在没有它的情况下进行编译?就像我上面说的那样,我有一个旧版本的V8 .lib,它不需要运行DLL,它编译并且工作正常...但我错过了更新的功能和改进,因为这是四年旧?无论如何,所有这些.libs的含义是什么?我找不到任何关于哪些人做什么或类似事情的文件.

所以,是的,我想如果有人能提供指示或指向我任何有用的文件,那将是伟大的.我昨天花了差不多整天试图解决这个问题.

v8 embedded-v8 visual-studio-2013

8
推荐指数
1
解决办法
6624
查看次数

如何"锁定"V8?

我是V8的新手,并计划在python Web应用程序中使用它.目的是让用户提交和执行某些JS脚本.显然这是一个安全威胁,所以我正在寻找资源来记录人们可能"锁定"v8的方式.例如,我可以创建一个允许调用的白名单吗?或者不允许引用黑名单库?

javascript python sandbox embedded-v8

6
推荐指数
1
解决办法
658
查看次数

将Google V8嵌入ANSI C应用程序 - 从哪里开始?

我想将一个javascript引擎嵌入到ANSI C应用程序中.

实际上,我希望能够在运行时运行一些代码,同时能够与一些C变量和函数进行交互.

那么,V8是唯一的选择吗?我应该从哪里开始?

v8 c99 embedded-language embedded-v8

6
推荐指数
1
解决办法
3986
查看次数

如何设置Google的v8 javascript独立引擎进行远程调试?

如何设置/构建/运行Google的V8引擎,以便我可以调用示例javascript文件并逐步解释它一直到C++代码?

v8 remote-debugging embedded-v8

6
推荐指数
1
解决办法
1732
查看次数

PHP中V8的用例是什么?

PHP嵌入了V8 JavaScript引擎,http://www.php.net/manual/en/book.v8js.php.我想知道什么是可能的用例,尤其是.考虑到PHP是同步的,JavaScript是异步的.

php v8 embedded-v8

6
推荐指数
3
解决办法
5356
查看次数

创建不同的 v8 上下文,它们是另一个上下文的克隆

使用 Google 的 v8 c++ 库,我想创建一个上下文,其中定义了多个模板、变量和全局变量,并准备好供代码中的多个地方使用,这些地方可能运行在不同的线程上,每个地方都有自己的隔离,它们也应该在这里每个线程都有自己的本地上下文副本,因此对一个线程中全局变量的任何更改都不会影响其他线程。

每次我想要一个新的上下文时,我都可以通过显式设置我的所有模板、变量和全局变量来做到这一点,但我想知道是否有更有效的方法。假设我已经有一个代表主状态的全局 v8::Isolate 指针和 v8::Persistent。如果我想在自己的线程中创建一个全新的隔离,并创建一个本质上是 master 克隆的新上下文,那么我需要做什么?我知道我可以在对 master 的访问周围包装一个互斥锁,以确保不同的线程在必要时不会同时访问它。我只是不知道如何有效地将在一个隔离中创建的信息复制到另一个隔离中,而无需从头开始重新创建其全部内容。

c++ multithreading v8 embedded-v8

6
推荐指数
1
解决办法
624
查看次数

如何在 v8 Javascript 中的多个函数中使用相同的上下文?

我是 V8 的新手,并试图在我的 C++ 和 JS 代码之间创建一些绑定。问题是我无法跨不同的 Javascript 函数访问全局 Javascript 变量。原因是因为每个 Javascript 函数都被称为我不同的 C++ 函数。我想我的代码的问题是我在每个 C++ 函数中创建了一个新的本地上下文。

我的 JS 代码

var test = [];

function f1()
{
    var obj = {};
    obj.name = "Testing";
    test.push(obj);
}

function f2()
{
    var value = test[0].name;
}
Run Code Online (Sandbox Code Playgroud)

我的 C++ 代码

class Test 
{

  v8::Persistent<v8::Script> compiledScript;
  v8::Local<v8::Value> result;
  v8::Isolate* isolate;
  v8::Persistent<v8::Context> context;

  Test(filePath) {

      // Create and allocate isolate

      v8::Locker isolateLocker(isolate);
      v8::Isolate::Scope isolate_scope(isolate);
      v8::HandleScope handle_scope(isolate);
      // Create some bindings

      v8::Local<v8::Context> con = …
Run Code Online (Sandbox Code Playgroud)

javascript c++ v8 embedded-v8

6
推荐指数
1
解决办法
1231
查看次数