首页 > 解决方案 > 我怎样才能删除一些注入脚本

问题描述

我在我的 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();
                    }....

现在在应用程序的后期有一种方法可以删除我之前注入的这个脚本。

标签: javascriptgwt

解决方案


简而言之,由于 JS 的工作方式,您可能可以执行您所描述的操作并删除脚本标签本身,但可能无法执行您的实际意思 - 代码已执行,您无法将牙膏放回管中. 通常可以删除脚本标记,也可以删除一些已创建的函数或类型,但是任何已经在运行并与您的页面交互的代码都会一直存在,直到它决定完成。

相反,你想了解你正在使用的 JS 脚本,看看是否有办法要求它完成,删除它修改过的任何元素等。

--

fromUrl和变体都fromString使用一个inject()方法,并且两个方法都返回一个JavaScriptObject. 该对象是实际的<script>标签 - 您可以将其强制转换Element并调用removeFromParent()它,脚本标签将消失 - 但包含脚本的副作用仍然存在。

其他选项包括<iframe>单独调用它并从主页仔细调用它,然后删除 iframe - 这仅作为删除所有导出函数等的简单方法,但不会撤消任何其他副作用。要了解如何做到这一点,您需要完全了解脚本在做什么 - 希望他们有文档来描述您如何实现您的目标(或者您可以进一步澄清您的问题)。


推荐阅读