原始答案
我的原始答案表明,每次执行executeString时都会调用扩展名.
更正了答案
扩展是在给定V8Js实例的第一个executeString调用之前执行的一些代码.
扩展可以是所有V8J实例的全局扩展,也可以是特定实例的本地扩展.
我已经通过实验确定这并不总是非常可靠.如果你疯狂刷新一个页面,你可能并不总是看到扩展程序运行…这可能是为什么这是beta版软件.
这是我掀起的两个例子
全球扩展示例
码
V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
产量
hey from extension! hello from regular code! extension already said hi
非全球范例
码
V8Js::registerExtension('say_hi', 'print("hey from non global extension! "); var said_hi=true;');
$v8 = new V8Js('PHP', array(), array('say_hi'));
$v8->executeString('print("hello from regular code!");', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
产量
hey from non global extension! hello from regular code! extension already said hi