将Javascript添加到页面的通常方法是将其添加到文档的<body>
或<head>
中,无论是静态超文本标记语言还是生成的服务器端内容。
我希望生成动态Javascript,并以动态方式将其添加到文档中;即在运行时按需添加。例如通过WebSocket传输的Javascript代码。
一种方法是创建脚本元素,将包含脚本内容的字符串添加到.text属性中,最后将脚本添加到文档中,如下所示:
var scriptContent = 'console.log("dynamic script");';
var s = document.createElement('script');
s.text = scriptContent;
document.body.appendChild(s);
这是可行的,但我担心的是脚本的执行使用与HTML文档相同的URL/源。然而,如果它是一个单独的文件,使用s.src参数调用,那么在查看浏览器控制台时,它将显示在自己的URL下。
为什么这是相关的?当使用浏览器控制台进行调试和检查时,它通常会告诉您脚本的名称以及打印到控制台的消息的行/列。例如,当打开控制台时,用户可能会看到几条控制台消息,消息的右侧显示原点和行/列信息:
<domainname>:1:1
separate_js_file.js:14:20
这是我想要的行为,因为它使区分哪些脚本向控制台写入了内容变得很容易。然而,如果将Javascript动态添加到页面中,那么所有内容都会在主文档下进行“广告”,通常是通过域名打印出来的,比如domain.com:1:1
。
我想要的是改变/假装/伪装脚本的起源,假装它是一个外部脚本。这样,并不是所有打印到控制台的行都来自原始domain.com:<line>:<column>
,而是像module1:<line>:<column>
一样被专门调用。
这有可能吗?
发布于 2018-10-27 03:51:31
我认为您可以在动态JS的末尾附加一个源图。
//# sourceURL=http://example.com/path/to/your/sourcemap.map
当在Firefox中使用eval语句时,以及在chrome中使用插入的脚本标记和evals时,这是有效的。可能也是通过脚本标签让Firefox理解它的一种方式。
详情请参见https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Use_a_source_map。
有关更多详细信息,请参阅Can't see dynamically loaded code in Chrome Developer Tools 22。
https://stackoverflow.com/questions/53015303
复制相似问题