You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Blogger不可修改的textarea中提取指定JS代码片段?

提取Blogger中动态type属性的script标签内指定代码片段

针对你遇到的Blogger平台中textarea#tempJs里script标签type属性动态变化、导致split方法失效的问题,这里提供两种可行的提取方案:

方案1:DOM解析法(推荐)

利用浏览器原生HTML解析能力,把textarea内容转为DOM节点后遍历筛选,完全不受type属性变化影响:

// 获取目标textarea的内容
const tempJsContent = document.getElementById('tempJs').value;

// 创建临时容器用于解析HTML
const tempDiv = document.createElement('div');
tempDiv.innerHTML = tempJsContent;

// 遍历所有script标签,筛选包含双关键词的内容
let targetCode = null;
for (const script of tempDiv.querySelectorAll('script')) {
  const content = script.textContent;
  if (content.includes("window['__wavt']") && content.includes("_WidgetManager._RegisterWidget")) {
    targetCode = content;
    break;
  }
}

// 处理结果
if (targetCode) {
  console.log('提取到的目标代码:', targetCode);
  // 这里可添加后续逻辑,比如执行代码或保存
} else {
  console.log('未找到符合条件的代码片段');
}

这种方法兼容性和可靠性更强,能处理各种合法HTML结构,不用担心type属性的动态变化。

方案2:正则表达式匹配

如果偏好纯字符串处理,可使用模糊匹配type属性的正则直接捕获目标内容:

const tempJsContent = document.getElementById('tempJs').value;

// 正则匹配任意type属性的script标签,捕获包含双关键词的内容
const regex = /<script[^>]*type=["']?[^"']*["']?[^>]*>([\s\S]*?window\['__wavt'\][\s\S]*?_WidgetManager\._RegisterWidget[\s\S]*?)<\/script>/i;
const matchResult = tempJsContent.match(regex);

if (matchResult) {
  const targetCode = matchResult[1];
  console.log('提取到的目标代码:', targetCode);
} else {
  console.log('未找到符合条件的代码片段');
}

正则说明:

  • <script[^>]*type=["']?[^"']*["']?[^>]*>:匹配任意type属性的script标签开头(支持带/不带引号的type值)
  • ([\s\S]*?window\['__wavt'\][\s\S]*?_WidgetManager\._RegisterWidget[\s\S]*?):捕获包含两个目标关键词的script内容,[\s\S]匹配所有字符(含换行),*?避免过度匹配多个script标签
  • <\/script>:匹配script标签结尾

注意:如果script内容里包含</script>字符串(比如注释中),正则可能提前终止匹配,这种场景下DOM解析法更稳妥。

内容的提问来源于stack exchange,提问作者Pinku Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:05:21