如何删除GWT中注入的CSS资源?

如何删除GWT中注入的CSS资源?,gwt,uibinder,gwt2,clientbundle,cssresource,Gwt,Uibinder,Gwt2,Clientbundle,Cssresource,我想删除GWT应用程序中注入的CSSResource 我使用了以下代码MyClass.INSTANCE.ensureInjected 我想上面的CSSResource只为一个特定的页面。所以剩下的页面应该按照实际的css/主题来工作 一旦我注入它,它就适用于整个应用程序。如何克服这个问题?如果您在多个页面中嵌入了相同的GWT应用程序,并且希望基于给定页面有不同的行为,您可以调用 MyClass.INSTANCE.ensureInjected(); 如果设置了引导参数。 在主机页中,设置参数,如

我想删除GWT应用程序中注入的CSSResource

我使用了以下代码MyClass.INSTANCE.ensureInjected

我想上面的CSSResource只为一个特定的页面。所以剩下的页面应该按照实际的css/主题来工作


一旦我注入它,它就适用于整个应用程序。如何克服这个问题?

如果您在多个页面中嵌入了相同的GWT应用程序,并且希望基于给定页面有不同的行为,您可以调用

MyClass.INSTANCE.ensureInjected();
如果设置了引导参数。 在主机页中,设置参数,如yourgwtap.nocahe.js?css=inject,并按照说明读取它
在onLoadMethod中,根据您的引导参数调用ensureInjected。

如果您在多个页面中嵌入了相同的GWT应用程序,并且希望基于给定页面有不同的行为,您可以调用

MyClass.INSTANCE.ensureInjected();
如果设置了引导参数。 在主机页中,设置参数,如yourgwtap.nocahe.js?css=inject,并按照说明读取它
在onLoadMethod中,根据您的引导参数调用ensureInjected。

理论上,您可以尝试从DOM中删除注入的样式块,但这将非常困难,并且可能不太可靠

以不同的方式组织“特殊”CSS样式表更好:

像这样转动选择器

.some {
  color: green;
}

.other {
  color: red;
}
进入


然后添加/删除“特殊”类,例如添加/删除body元素中的“特殊”类,以激活/停用特殊样式。

理论上,您可以尝试从DOM中删除注入的样式块,但这将非常困难,而且可能不太可靠

以不同的方式组织“特殊”CSS样式表更好:

像这样转动选择器

.some {
  color: green;
}

.other {
  color: red;
}
进入


然后添加/删除“特殊”类,例如添加/删除body元素以激活/停用特殊样式。

您可以直接使用StyleInjector实用程序类而不是ensureInjected方法注入css包

然后您将有一个注入元素的引用,您可以在需要时删除它

//等效于MyClass.INSTANCE.ensureInjected StyleElement e=StyleInjector.injectStylesheetMyClass.INSTANCE.css.getText; //移除注入的css元素 e、 离开父母;
您可以直接使用StyleInjector实用程序类而不是ensureInjected方法注入css包

然后您将有一个注入元素的引用,您可以在需要时删除它

//等效于MyClass.INSTANCE.ensureInjected StyleElement e=StyleInjector.injectStylesheetMyClass.INSTANCE.css.getText; //移除注入的css元素 e、 离开父母;
在AJAX或GWT应用程序中,通常不会加载其他页面来重新构建DOM,因此注入的CSS会保留在页面上。@ChrisLercher,除非将其包装为GWT.runAsynch块中的MyClass.INSTANCE.ensureInjected runAsync块只意味着稍后可以加载该块的javascript代码。但是,一旦代码被执行,注入的样式元素将保留在DOM中,直到您明确地将其删除为止。例如,@Manolo的答案。@ChrisLercher这是真的。在问题的场景中,给定页面的runAsync块要么被调用,要么根本不被调用。因此,代码将仅在DOM中用于真正需要的页面。我同意这不是很干净的通缉功能。我觉得它很适合这个问题中的给定实现,但它本身不是很干净。在AJAX或GWT应用程序中,通常不会加载另一个页面来重新构建DOM,因此,插入的CSS保留在页面上。@ChrisLercher,除非将其包装为GWT.runAsync块中的MyClass.INSTANCE.ensureInjected runAsync块意味着该块的javascript代码可以稍后加载。但是,一旦代码被执行,注入的样式元素将保留在DOM中,直到您明确地将其删除为止。例如,@Manolo的答案。@ChrisLercher这是真的。在问题的场景中,给定页面的runAsync块要么被调用,要么根本不被调用。因此,代码将仅在DOM中用于真正需要的页面。我同意这不是很干净的通缉功能。我觉得它很适合这个问题中的给定实现,它本身不是很干净。我喜欢这个解决方案,它会使皮肤的创建变得非常干净和容易。我喜欢这个解决方案,它会使皮肤的创建变得非常干净和容易。