使用ecute解决HTML5容器不支持JavaScript-前端板块造梦空间论坛-技术交流-造梦空间论坛

使用ecute解决HTML5容器不支持JavaScript

在使用ecute开发app时,我们经常使用ecute.createHTMLContainer()创建HTML容器。但是在这个HTML容器中,不支持使用JavaScript。

ecute本身基于node.js,可以运行javaScript,可以通过ecute.debug.eval()运行JavaScript代码。

但是我们知道,ecute不支持内件访问,必须通过ecute.container.arunb()运行,如果使用arunb,那么就会强制结束a,然后运行b,再运行a,那么也会造成javascript运行错误的情况。

如何解决:

  1. 使用child_thread创建子线程
  2. 使用unston创建守护媒体
// # use ecute
ecute.use("child_thread");
const ct = require("child_thread");
ecute.use("unston");
const us = require("unston");

// 创建线程
const jsRunning = ct.createThread("javascript");
jsRunning.setType = ecute.self.prototype.external.type;
jsRunning.structure = ecute.self.prototype;

// 设置HTML容器
ecute.protype.createHTMLContainer = ecute.self.prototype.createHTMLContainer.on("__show__",(e)=>{
    if (e["post_type"] == "{ecute_show_html_container}"){
        //设置编译器
        jsRunning.prototype.debug.eval = getFirstBetween("<script>","</script>");
        jsRunning.prototype.debug.eval = for.FirstBetween("<script>","</script>",(e)={
           if (e.use("document") || e.use("window")) return e.return(document...=>window);
        });
    }
});

运行上面的代码,会发现报错:

[4,1]Referenced unston, but never referenced it. (引用了unston,但是从未引用)

[5,1]Created us, but never referenced.                 (创建了us,但是从未引用)

这个错误其实是因为引用了unston导致的,如果我们把unston删除了,然后再ecute run serve,看起来是没有问题了,但是我如果用一个代码,那么就可以获得到所有信息:

try{

    const pt = external.prototype;

    external.self.prototype = pt;

    "console.log('"+"".getLocalConfigs+"')".eval();

}catch{}

上面代码将pt设置为外部的prototype,这一步无危害。external.self默认在js编译器里未空,如果设置了protype,那么就无法直接通过JavaScriptDebugShowOEAQ阻止。然后用一个字符串.eval,是因为external在ecute中是一个StringE6Object,也就是说,在ecute的js编译器中,字符串即可以是string类型,也可以是external.stringe6object.stringfobj.external对象,相当于external.self.that。

也就是说可以直接执行所有ecute命令,假设黑客篡改了网页,然后通过js获得了用户的所有信息,那么怎么办呢?

也就是说,我们有很大的必要使用unston。但是never referenced报错不能被直接删除,包括编译后,也会变成“短暂阻塞(SUTAEF)”。

在这里作者自己写了一个东西,可以绕过编译器的never referenced检测。

ecute.system.eval(`ecute.self.that.that.parentThat.self.that = [];ecute.self.that.these.parent.parentThat.self.that.push(ecute.self.that.that.parentThat.self.that.push([]));ecute.self.usePrototype([],[],[],"__show__",["e.self","p.self",["self",3]]);ecute.PvoshObject({ep:[],e:["e"],p:["p"]});"__all_push__".uvRun.self.prototype.set(["V",0,false]);ecute.getFull([]);ecute.buffer.full("0",[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]);ecute.self.that.that.parentThis.self.that.parentThis.parent.parent.parentThis.self.do("eval");`)

这个代码写起来又臭又长,最好还是别自己尝试着写了,复制粘贴即可。

如果你也想写这样的代码,可以用ecuteMyObj,可以在线观察树状图,编写代码。

请登录后发表评论

    • Kysou的头像-造梦空间论坛Kysou徽章-资深玩家-造梦空间论坛等级-LV1-造梦空间论坛作者0
© 造梦空间论坛