承接上篇【dart-skeleton】自动生成骨架屏项目内容,这一篇主要来说一下第二块内容逻辑篇。
提供两个函数供使用: 公开使用的start方法的主要工作流程:
const page = await pb.open(
this.options.url,
this.options.emulateOpts,
this.options.extraHTTPHeaders
);
复制代码
const html = await this.generateSkeletonFragment(page);
复制代码
rewriteHtml(this.options.output.injectSelector, this.filepath, html);
复制代码
await pb.close();
process.exit(0);
复制代码
// function
value: `${this.options.includeElement}`
// object
value: JSON.stringify({
height: this.options.header?.height,
background: this.options.header?.background,
})
// string
value: value
复制代码
let scriptContent = await fs.readFileSync(
path.resolve(__dirname, "eval-dom-scripts.js"),
"utf8"
);
复制代码
await page.addScriptTag({ content: scriptContent });
复制代码
await page.evaluate((res) => {
// @ts-ignore
return window.evalDOMScripts.apply(window, res);
// @ts-ignore
}, opts)
复制代码
this.browser = await puppeteer.launch({
headless: !this.isDebug,
devtools: this.isDebug,
slowMo: 5,
});
复制代码
const page = await this.browser.newPage();
复制代码
await page.setExtraHTTPHeaders(extraHTTPHeaders);
复制代码
emulateOpts = puppeteer.devices["iPhone 6"];
await page.emulate(emulateOpts);
复制代码
await page.goto(url, {
timeout: 2 * 60 * 1000,
waitUntil: "networkidle0",
});
复制代码
说明: 此项目是在dps项目的基础上重写的一个Ts版本,目的是学习思路方便后续改造。