JavaScript: перекрестный браузер document.execCommand?

Вот метод, который на самом деле работает (на основе нескольких предыдущих полукорректных ответов):

private static byte[] fromHexString(final String encoded) {
    if ((encoded.length() % 2) != 0)
        throw new IllegalArgumentException("Input string must contain an even number of characters");

    final byte result[] = new byte[encoded.length()/2];
    final char enc[] = encoded.toCharArray();
    for (int i = 0; i < enc.length; i += 2) {
        StringBuilder curr = new StringBuilder(2);
        curr.append(enc[i]).append(enc[i + 1]);
        result[i/2] = (byte) Integer.parseInt(curr.toString(), 16);
    }
    return result;
}

единственная возможная проблема, которую я вижу, - то, если входная строка чрезвычайно длинна; вызов toCharArray () делает копию внутреннего массива строки.

РЕДАКТИРОВАНИЕ: О, и между прочим, байты подписываются в Java, таким образом, Ваша входная строка преобразовывает в [0,-96,-65] вместо [0, 160, 191]. Но Вы, вероятно, уже знали это.

63
задан Michał Perłakowski 29 December 2015 в 22:03
поделиться

2 ответа

Это для «режима разработки», когда браузер эффективно превращает документ в редактор. API execCommand возник в IE и позже был добавлен в HTML5. Какие именно команды поддерживаются, а также их поведение зависит от браузера. Доступ к буферу обмена считается угрозой безопасности.

27
ответ дан 24 November 2019 в 16:29
поделиться

Обновление: ну, document.execCommand задокументирована в документации Mozilla DOM , но ее описание там немного отличается от документации MSDN.

Я все еще уверен, что это не в стандарте ECMA-262.

3
ответ дан 24 November 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: