Вот пример использования контроллера, введенного Guice.
/**
* Loads a FXML file and injects its controller from the given Guice {@code Provider}
*/
public abstract class GuiceFxmlLoader {
public GuiceFxmlLoader(Stage stage, Provider<?> provider) {
mStage = Objects.requireNonNull(stage);
mProvider = Objects.requireNonNull(provider);
}
/**
* @return the FXML file name
*/
public abstract String getFileName();
/**
* Load FXML, set its controller with given {@code Provider}, and add it to {@code Stage}.
*/
public void loadView() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource(getFileName()));
loader.setControllerFactory(p -> mProvider.get());
Node view = loader.load();
setViewInStage(view);
}
catch (IOException ex) {
LOGGER.error("Failed to load FXML: " + getFileName(), ex);
}
}
private void setViewInStage(Node view) {
BorderPane pane = (BorderPane)mStage.getScene().getRoot();
pane.setCenter(view);
}
private static final Logger LOGGER = Logger.getLogger(GuiceFxmlLoader.class);
private final Stage mStage;
private final Provider<?> mProvider;
}
Вот конкретная реализация загрузчика:
public class ConcreteViewLoader extends GuiceFxmlLoader {
@Inject
public ConcreteViewLoader(Stage stage, Provider<MyController> provider) {
super(stage, provider);
}
@Override
public String getFileName() {
return "my_view.fxml";
}
}
Обратите внимание, что этот пример загружает представление в центр BoarderPane, который является корнем сцены в рабочей области. Это не относится к примеру (деталь реализации моего конкретного варианта использования), но решил оставить его, поскольку некоторые из них могут оказаться полезными.
/ (?:?! (& Л; / с \ ш) & л; [^ & л;] ) & л; / с \ ш * / г; - Удаляет любую последовательность в любой комбинации с
jQuery использует регулярное выражение для удаления тегов скриптов в некоторых случаях, и я уверен, что у его разработчиков была чертовски веская причина. Вероятно, какой-то браузер выполняет скрипты при их вставке с помощью innerHTML
.
Вот регулярное выражение:
/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi
И перед тем, как люди начнут плакать, но регулярные выражения для HTML являются злыми »: Да, они , но для сценариев сценариев они безопасны из-за специального поведения - раздел <script>
может вообще не содержать </script>
, если он не должен заканчиваться на этом должность. Таким образом, легко сопоставить его с регулярным выражением. Однако при быстром просмотре регулярное выражение не учитывает конечные пробелы внутри закрывающего тега, поэтому вам нужно будет проверить, будут ли работать </script
и т. Д.
/<script[^>]*>([\\S\\s]*?)<\/script>/img
.
– RobG
12 July 2011 в 14:10
but for script tags they are safe
Здесь не удается: stackoverflow.com/a/18052486/2570622 <script type="text/javascript"> var test1 = "</script>"; var test2 = '<script>'; </script>
– Pragy Agarwal
18 November 2015 в 03:04
Regexes являются битными, но если у вас есть строковая версия HTML, которую вы не хотите вводить в DOM, они могут быть лучшим подходом. Вы можете поместить его в цикл, чтобы обрабатывать что-то вроде:
<scr<script>Ha!</script>ipt> alert(document.cookie);</script>
Вот что я сделал, используя регулярное выражение jquery сверху:
var SCRIPT_REGEX = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
while (SCRIPT_REGEX.test(text)) {
text = text.replace(SCRIPT_REGEX, "");
}
Вот несколько сценариев оболочки, которые вы можете использовать для выделения разных элементов.
# doctype
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<\!DOCTYPE\s\+html[^>]*>/<\!DOCTYPE html>/gi" {} \;
# meta charset
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/<meta[^>]*content=[\"'][^\"']*utf-8[\"'][^>]*>/<meta charset=\"utf-8\">/gi" {} \;
# script text/javascript
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<script[^>]*\)\(\stype=[\"']text\/javascript[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;
# style text/css
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<style[^>]*\)\(\stype=[\"']text\/css[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;
# html xmlns
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxmlns=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;
# html xml:lang
find . -regex ".*\.\(html\|py\)$" -type f -exec sed -i "s/\(<html[^>]*\)\(\sxml:lang=[\"'][^\"']*[\"']\)\(\s\?[^>]*>\)/\1\3/gi" {} \;
Попробуйте следующее:
var text = text.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/g, "")
Всякий раз, когда вам приходится прибегать к очистке тегов на основе Regex. По крайней мере, добавьте пробел в закрывающий тег в форме
</script\s*>
. В противном случае такие вещи, как
<script>alert(666)</script >
, останутся после окончания пробелов после того, как тэги будут действительны.
Вы можете попробовать
$("your_div_id").remove();
или
$("your_div_id").html("");
Почему бы не использовать jQuery.parseHTML () http://api.jquery.com/jquery.parsehtml/ ?
Если вы хотите удалить весь код JavaScript из некоторого текста HTML, то удалить <script>
теги недостаточно, потому что JavaScript все еще может жить в «onclick», «onerror», «href» и других атрибутах.
Попробуйте этот модуль npm, который обрабатывает все это: https://www.npmjs.com/package/strip-js
Это регулярное выражение тоже должно работать:
<script(?:(?!\/\/)(?!\/\*)[^'"]|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\/\/.*(?:\n)|\/\*(?:(?:.|\s))*?\*\/)*?<\/script>
Он даже позволяет иметь «проблематичные» переменные строки, подобные этим внутри:
<script type="text/javascript">
var test1 = "</script>";
var test2 = '\'</script>';
var test1 = "\"</script>";
var test1 = "<script>\"";
var test2 = '<scr\'ipt>';
/* </script> */
// </script>
/* ' */
// var foo=" '
</script>
Он сглаживает ошибку jQuery и Prototype на этих ...
Редактировать 31 июля '17: Добавлены a) не захватывающие группы для лучшей производительности (и без пустых групп) и b) поддержка комментариев JavaScript.
<script(?:
, иначе я получаю всегда пустую группу захвата. Говоря об этом, вы видите решение для вашего регулярного выражения для захвата содержимого js? Было бы интересно не удалять теги отдельно ..
– Kaddath
7 July 2017 в 14:22
'
или "
-). Но тем хуже то, что некоторые комментарии к этому сообщению абсолютно правы: даже внутри строки, </script>
заканчивает сценарий, это нормальное поведение, поэтому ваше регулярное выражение производит другой результат, чем метод DOM .. слишком плохо, я был энтузиастом: /
– Kaddath
7 July 2017 в 16:36