首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从伪装成外部脚本的字符串注入Javascript代码

从伪装成外部脚本的字符串注入Javascript代码
EN

Stack Overflow用户
提问于 2018-10-27 03:37:28
回答 1查看 97关注 0票数 5

将Javascript添加到页面的通常方法是将其添加到文档的<body><head>中,无论是静态超文本标记语言还是生成的服务器端内容。

我希望生成动态Javascript,并以动态方式将其添加到文档中;即在运行时按需添加。例如通过WebSocket传输的Javascript代码。

一种方法是创建脚本元素,将包含脚本内容的字符串添加到.text属性中,最后将脚本添加到文档中,如下所示:

代码语言:javascript
复制
var scriptContent = 'console.log("dynamic script");';
var s = document.createElement('script');
s.text = scriptContent;
document.body.appendChild(s);

这是可行的,但我担心的是脚本的执行使用与HTML文档相同的URL/源。然而,如果它是一个单独的文件,使用s.src参数调用,那么在查看浏览器控制台时,它将显示在自己的URL下。

为什么这是相关的?当使用浏览器控制台进行调试和检查时,它通常会告诉您脚本的名称以及打印到控制台的消息的行/列。例如,当打开控制台时,用户可能会看到几条控制台消息,消息的右侧显示原点和行/列信息:

代码语言:javascript
复制
<domainname>:1:1
separate_js_file.js:14:20 

这是我想要的行为,因为它使区分哪些脚本向控制台写入了内容变得很容易。然而,如果将Javascript动态添加到页面中,那么所有内容都会在主文档下进行“广告”,通常是通过域名打印出来的,比如domain.com:1:1

我想要的是改变/假装/伪装脚本的起源,假装它是一个外部脚本。这样,并不是所有打印到控制台的行都来自原始domain.com:<line>:<column>,而是像module1:<line>:<column>一样被专门调用。

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53015303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档