【问题标题】:How to extract variable from script tag in html blob如何从html blob中的脚本标签中提取变量
【发布时间】:2018-04-28 04:51:18
【问题描述】:

我试图弄清楚如何从一个巨大的 html 字符串中提取一个变量。下面是一个简化的例子:

更新这是尝试使用下面提到的常用方法的屏幕截图。像test['foo'] 这样简单的事情是行不通的。这是从服务器返回的字符串,永远不会加载到实际的文档或窗口中。它只是一个保存在内存中的 html 对象。

https://jsfiddle.net/hvpvg3o4/

HTML

<div id="test"> <!-- div is just for jsfiddle -->
  <script>
    var test = { // <-- I WANT YOU!
      foo: 'bar'
    };

    var somethingIDontWant = 1;
    var iDontCareAboutYouEither = {
        blag: 1 + 1
    };
  </script>
</div>

JavaScript

var testTag = document.getElementById('test');
var scriptTag = testTag.getElementsByTagName('script');
// var testObj = ?;

我希望我可以从脚本标签中获取文本并运行 eval 或一些 JSON.parse,但由于脚本标签中还有其他内容,所以我不能

有没有办法从脚本标签或一些花哨的正则表达式中提取变量?

【问题讨论】:

  • 你能解释一下你为什么要做这样的事情吗?你的 javascript 或 html 字符串来自哪里?
  • eval(scriptTag.innerHTML); console.log(test.foo);
  • 我正在尝试从包含大量 HTML 的响应中提取 URL。现在,我没有进入服务器并修复该过程的选项,所以我基本上被脚本标签和内联 JavaScript 卡住了。这是一个创可贴修复,但试图让它发挥作用

标签: javascript jquery html parsing


【解决方案1】:

如果需要的对象在 global 范围内声明。只要声明了 script 标记,就可以访问所需的对象。

示例:

<HTML>
<HEAD>
<SCRIPT>
    var test = {
      foo: 'bar'
    };

    var somethingIDontWant = 1;
    var iDontCareAboutYouEither = {
        blag: 1 + 1
    };
</SCRIPT>
</HEAD>
<BODY>
<DIV>UGLY HTML</DIV>
<SCRIPT>
//INSERT CUSTOM SCRIPT FOR ACCESSING DESIRED OBJECT//
console.log(test)
</SCRIPT>
</BODY>
</HTML>

控制台仍然可以访问 var test..即使在后面定义的脚本中...

输出: {foo: 'bar'}

【讨论】:

    【解决方案2】:

    试试这个

    console.log(test['foo'])
    console.log(somethingIDontWant)
    console.log(iDontCareAboutYouEither['blag'])
    <div id="test">
      <script>
        var test = {
          foo: 'bar'
        };
    
        var somethingIDontWant = 1;
        var iDontCareAboutYouEither = {
          blag: 1 + 1
        };
      </script>
    </div>

    【讨论】:

    • 我更新了我的问题。我所追求的变量未附加到窗口/文档。它在记忆中
    • 从内存中加载测试 div 后尝试使用 $(document) 可能会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 2018-12-28
    • 2020-01-07
    • 1970-01-01
    • 2016-07-24
    • 2021-05-05
    相关资源
    最近更新 更多