javascript - 我怎样才能删除一些注入脚本
问题描述
我在我的 GWT 应用程序中注入一个脚本
ScriptInjector.fromUrl("js/jquery-1.7.2.min.js").setWindow(ScriptInjector.TOP_WINDOW).setCallback(new Callback<Void, Exception>()
{
@Override
public void onSuccess(Void paramT)
{
ScriptInjector.fromUrl("js/viewer-2.2.1/WebViewer.min.js").setWindow(ScriptInjector.TOP_WINDOW).setCallback(new Callback<Void, Exception>()
{
@Override
public void onSuccess(Void paramT)
{
ScriptInjector.fromString(getCreateInjection()).setWindow(ScriptInjector.TOP_WINDOW).setRemoveTag(false).inject();
}....
现在在应用程序的后期有一种方法可以删除我之前注入的这个脚本。
解决方案
简而言之,由于 JS 的工作方式,您可能可以执行您所描述的操作并删除脚本标签本身,但可能无法执行您的实际意思 - 代码已执行,您无法将牙膏放回管中. 通常可以删除脚本标记,也可以删除一些已创建的函数或类型,但是任何已经在运行并与您的页面交互的代码都会一直存在,直到它决定完成。
相反,你想了解你正在使用的 JS 脚本,看看是否有办法要求它完成,删除它修改过的任何元素等。
--
fromUrl
和变体都fromString
使用一个inject()
方法,并且两个方法都返回一个JavaScriptObject
. 该对象是实际的<script>
标签 - 您可以将其强制转换Element
并调用removeFromParent()
它,脚本标签将消失 - 但包含脚本的副作用仍然存在。
其他选项包括<iframe>
单独调用它并从主页仔细调用它,然后删除 iframe - 这仅作为删除所有导出函数等的简单方法,但不会撤消任何其他副作用。要了解如何做到这一点,您需要完全了解脚本在做什么 - 希望他们有文档来描述您如何实现您的目标(或者您可以进一步澄清您的问题)。
推荐阅读
- c# - 为什么 C# 和 CUDA C++ 的矩阵逆计算中的中间值略有不同?
- reactjs - Vercel 无法在生产中与我的后端通信
- google-cloud-platform - 从另一个云运行访问一个云运行
- reactjs - 垂直渲染组件而不是水平渲染
- r - 填充R中置信带的颜色?
- azure-application-insights - 无法从代码触发 Snapshot Debugger 快照
- go - 如何在 golang 中使用 protobuf.any
- javascript - apify-cli 中是否有 Pull 命令?
- php - Laravel 7.x 非法偏移类型
- javascript - 我的控制台显示 Uncaught SyntaxError: Unexpected identifier