由于内联模块脚本没有document.currentScript
,我们不能简单地将其附加document.currentScript.remove()
在脚本末尾。
附加说明/背景:
- 我指的是模块脚本执行的同步阶段。即,一旦脚本同步执行,就应立即删除,而无需等待其他代码可能运行的事件循环滴答。
- 我正在以编程方式将模块脚本添加到 DOM,但我无法控制脚本标记内的代码(即它是“用户空间”代码),也无法控制它是否是模块脚本等等。我只能对脚本进行不影响代码的简单
document.currentScript.remove()
修改 - 例如附加就可以了,但将脚本包装在函数/块作用域中或类似操作会对代码产生重大影响(例如变量作用域),所以我不能做这样的事情。 - 我必须承认,这是一个不寻常的要求,但这是一个不寻常的用例 - 与开发工具/实时调试/等相关。
您可以尝试将
class
或分配id
给用户脚本并使用它来删除该脚本。正如@Bergi 所说,您可能需要考虑将代码添加
document.querySelector('.${uniqueClass}').remove()
到脚本的前面,这样即使用户代码中出现错误也能保证运行(SyntaxError 情况除外)。我完全不确定它对于脚本模块来说有多大用处——据我所知,尝试从内联脚本导入数据会因 CORS 错误而失败,因为脚本模块需要从网络检索才能按照文档说明工作。
警告:这是对黑客请求的响应,根据“不要起诉我许可”提供“原样”供您考虑。