Как отобразить текст в строке состояния браузера? - PullRequest
22 голосов
/ 18 сентября 2009

Как мы можем изменить текст, отображаемый в строке состояния браузера, используя JavaScript (или jQuery)?

Ответы [ 5 ]

25 голосов
/ 06 ноября 2015

Это можно сделать . Google Search делает это, что видно, когда вы наводите курсор мыши на ссылку Google, в строке состояния отображается соответствующий сайт:

enter image description here

Тем не менее, когда вы щелкаете по нему, вы переходите к URL-адресу, зависящему от местоположения и пользовательского агента, который выглядит как https://www.google.com.sg/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC8QFjAAahUKEwi4lP-Z4_rIAhVLk5QKHXRLAe8&url=https%3A%2F%2Fwww.example.com%2F&usg=AFQjCNFEbIRqDC65KFpmuak0aXKmnzjKVQ&bvm=bv.106923889,d.dGo. URL отслеживает Google и еще много чего, прежде чем перенаправить вас на https://www.example.com. Вы можете легко проверить это с помощью Network Inspector с « preserve log ».

Они используют хакерский взлом , но он работает во всех браузерах .

Хитрость заключается в том, чтобы понять, что мы можем установить в строке состояния практически все, используя только HTLM a href (без CSS и JavaScript не требуется). Все, что нам нужно, это заставить парсер браузера думать, что значение href является действительным URL-адресом, и он будет отображать его.

Попробуйте запустить этот фрагмент:

<a href="http://.# this is p͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔͕͓͔̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐̑̓̐͜͜͜͜͜͜͜͜͜͜͜͜‌​̴̵̶͕͓͔͕͓͔͕͓͔͕͓͔̖͕͓̖̱̲̳̖̖̖̖̖̖̖͕̑̓̐̑̓̐̑̓̐̑̓̑̒̓̔̐̒̓̔̒̓̔̒̓̔̒̓̔̒̓̔̒̓̔̒̓̔̒̓̔̒̓̔̐̕̚͜͜͜͜͜‌​͓͔̖͕͓͔̖͕͓͔̖͕͓͔̖͕͓͔̖͕͓͔̖̑̓̑̒̓̔̐̑̓̑̒̓̔̐̑̓̑̒̓̔̐̑̓̑̒̓̔̐̑̓̑̒̓̔̐̑̓̑̒̓̔̕̚̕̚̕̚̕̚̕̚̕̚͜͜͜͜͜‌​͕͓͔̖͕͓͔̖̐̑̓̑̒̓̔̐̑̓̓̓̓̓̓̓̑̒̓̔̕̚̕̚͜͜owerful because ━Σ(゚Д゚|||)━ symbols !@)(*#&$^%</even htlm> or lorem ipsum in all scripts Лорем ипсум Lorem存有 ငါ့ရဲ့ဇာတ်မြင့် घरՏուն Дома ലോറെൻ  ഇപ്സം درமுகப்புЛорем ипсумలోלורם איפסוםరెం ఇప్సమ్ მთავარი હોમ לורם איפסוםלורם איפסום Forsíða Loremのイプサム ಮುಖಪುಟ ទំព័រដើម 가 lorem ipsum의 ຫນ້າທໍາອິດ Տուն আর্কাইভ">Hover this link (do not click) and observe the browser's status bar.</a>

Вывод Chrome (щелкните изображение, чтобы увеличить его): (v46.0.2490.80 м)

enter image description here

Вывод FireFox: (v42.0)

enter image description here

Вывод IE: (v11.0.9600.17905 версии обновления 11.0.21 (KB3065822))

enter image description here

Выход Opera: (v33.0.1990.58 стабильный)

enter image description here

Вывод Seamonkey: (v2.38)

enter image description here

Выход Avant: (v Ultimate 2015, сборка 28)

  • Двигатель IE 11:

    enter image description here

  • IE совместимый движок:

    enter image description here

  • Хромированный двигатель:

    enter image description here

  • Двигатель FireFox:

    enter image description here

Выход горелки: (v42.0.0.10546)

enter image description here

Вывод Baidu: (v43.19.1000.119)

enter image description here

Вывод Maxthon: (v4.4.8.1000)

enter image description here


Также нет необходимости использовать # (идентификатор фрагмента ). Браузеры также будут рассматривать текст типа http://some.message.here./and_more_message_here в качестве действительного URL. Более странные строки могут считаться действительными в зависимости от браузера:

  1. <a href="http://a.b.c.d/test_symbols_!#$%^&*()[]{};:'&quot;.><,//=+``~">

    (Chrome, FireFox, IE, SM, Torch, Baidu, Maxthon, Avant IE11, Avant IE Compat, Avant Chrome, Avant Firefox.)

    (имена указаны для браузеров с ожидаемым выводом, имена вычеркнуты (" пример ") для браузеров без вывода строки состояния, а имена подчеркнуты ("e̲x̲a̲m̲p̲l̲e̲") для браузеров с неожиданным выводом / поведение. Протестировано с версиями браузера, такими же, как перечисленные выше.

  2. <a href="http://a.b.c.d/test some spaces">

    (Chrome, FireFox, I̲E̲, SM, Torch, B̲a̲i̲d̲u̲, M̲a̲x̲t̲h̲o̲n̲, A̲v̲a̲n̲t̲ I̲E̲ ̲1̲1̲, A̲v̲a̲n̲t̲ I̲E̲ ̲C̲o̲m̲ 11 * ** 556

  3. <a href="http://test some . spaces in domain part/a_b_c_d_e">

    (хром, FireFox * тысячу сто шестьдесят две *, IE SM , факел, Baidu, Maxthon, Avant IE 11, Авант IE Compat, Авант хром, Авант Firefox * +1166 *)

  4. <a href="http://test some . spaces in domain part without slash">

    (хром, FireFox , IE * тысяча сто семьдесят шесть * SM , факел, Baidu, Maxthon, Avant IE 11, Авант IE Compat, Авант хром, Авант Firefox * одна тысяча сто семьдесят девять *)

  5. <a href="http://test_without_slash_and_dots">

    (Chrome, FireFox, IE, SM, Torch, Baidu, Maxthon, Avant IE11, Avant IE Compat, Avant Chrome, Avant Firefox)

  6. <a href="http://a.b.c:port_with_letters_test">

    ( Chrome , FireFox , IE , SM , Факел , Baidu , Maxthon , Avant IE11 , A̲v̲a̲n̲t̲ I̲E̲ ̲C̲o̲m̲p̲a̲t̲, Avant Chrome , Avant Firefox )

  7. <a href="http://http://double.http.test">

    (Chrome, FireFox, IE, SM, Torch, Baidu, Maxthon, Avant IE11, Avant IE Compat, Avant Chrome, Avant Firefox)

  8. <a href="http://test @ with spaces">

    (хром FireFox IE SM , фонарик, Baidu, Maxthon, Avant IE 11, Avant IE Compat, Avant Chrome Avant Firefox )

  9. <a href="http://test:password@ with spaces/">

    * Тысяча двести сорок два * (хром, FireFox , IE * +1246 *, SM * 1 248 *, факел, Baidu, Maxthon, Avant IE 11, Авант IE Compat, Авант хром, * один тысяча двести сорок девять * Avant Firefox )
  10. <a href="http:// test : password @with.spaces/">

    (Chrome, FireFox, IE , SM, факел, Baidu, Maxthon, Avant IE 11, Avant IE Compat, Avant Chrome, Avant Firefox)

  11. <a href="http://test@double@a.b.c.d">

    (C̲h̲r̲o̲m̲e̲, FireFox, IE , SM, T̲o̲r̲c̲h̲, B̲a̲i̲d̲u̲, Maxthon, A̲v̲a̲n̲t̲ I̲E̲ ̲1̲1̲, A̲v̲a̲n̲t̲ I̲70̲6969 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12

  12. Повторите все приведенные выше тестовые строки, заменив http:// на https://, ftp://, about://, chrome://, file://, foobar:// и т. Д.

Мы можем видеть, что, если браузер не считает строку допустимым URL-адресом, он будет некорректно работать без отображения строки состояния, поэтому никакого вреда не будет. (За исключением того, что, похоже, в Avant IE Compat происходят некоторые ошибки с тестовой строкой "http://a.b.c:port_with_letters_test".)


Получение строки состояния браузера для отображения желаемой строки - это только первый шаг. Второй шаг - запретить браузеру загружать страницу, когда пользователь щелкает ссылку.

Это легко сделать с помощью return false:

<a onclick="return false" href="http://some.message.here./and_more_message_here">this link will not load</a>

или

<a onclick="return f()" href="http://some.message.here./and_more_message_here">this link will not load</a>
<script>
  function f() {
    return false;
  }
</script>

Выше двух фрагментов были протестированы на работу с Chrome, FireFox, IE, SM, Torch, Baidu, Maxthon, Avant IE11, Avant IE Compat, Avant Chrome, Avant Firefox.


Последний шаг - использовать window.location или window.open для имитации поведения a href. Это может быть сделано inline: ( онлайн-тест )

<!doctype html>
<a onclick="location='http://example.org'; return false" href="https://some.message.here./and_more_message_here">same tab</a>
<br><a onclick="window.open('http://example.org'); return false" href="https://some.message.here./and_more_message_here">new tab</a>


Или используя return func(): ( онлайн-тест )

<!doctype html>
<a onclick="return f1()" href="http://some.message.here./and_more_message_here">same tab 2</a>
<br><a onclick="return f2()" href="http://some.message.here./and_more_message_here">new tab 2</a>
<script>
  function f1() {
    location = 'http://example.org';
    return false;
  }

  function f2() {
    open('http://example.org');
    return false;
  }
</script>

Или в строке с setTimeout: ( онлайн-тест )

<!doctype html>
<a onclick="setTimeout(function(){location='http://example.org';},1); return false" href="https://some.message.here./and_more_message_here">same tab 3</a>
<br><a onclick="setTimeout(function(){window.open('http://example.org');},1); return false" href="http://some.message.here./and_more_message_here">new tab 3 (doesn't work on Avant IE11 and Avant IE Compat if this link is HTTP; works if it is HTTPS or FTP)</a> 


Или используя return func() с setTimeout: ( онлайн-тест )

<!doctype html>
<a onclick="return f1()" href="http://some.message.here./and_more_message_here">same tab 4</a>
<br><a onclick="return f2()" href="http://some.message.here./and_more_message_here">new tab 4 (doesn't work on Avant IE11 and Avant IE Compat if this link is HTTP; works if it is HTTPS or FTP)</a> <!-- hadn't tested this with sourcepage=HTTP. only tested with sourcepage=HTTPS and sourcepage=localwebpage -->
<script>
  function f1() {
    setTimeout(function() {
      location = 'http://example.org';
    }, 1);
    return false;
  }

  function f2() {
    setTimeout(function() {
      open('http://example.org');
    }, 1);
    return false;
  }
</script>

Выше двух фрагментов также протестированы для работы в Chrome, FireFox, IE, SM, Torch, Baidu, Maxthon, Avant IE11 (с оговоркой, указанной в коде), Avant IE Compat (с оговоркой, указанной в коде), Avant Chrome, Avant Firefox.

20 голосов
/ 18 сентября 2009

jQuery не требуется для этого:

<script>
function writetostatus(input){
    window.status=input
    return true
}
</script>

Однако большинство новых браузеров не позволяют вам устанавливать текст в строке состояния из JavaScript.

4 голосов
/ 01 декабря 2010

Для кого это может касаться простой заметки , специфичной для IE :

До IE6 и включая его вы можете сделать:

window.status = "Hello, I'm a custom status bar note.";

Но после IE6 (протестированный IE7 / 8) вы делаете то же самое, но вам также необходимо адаптировать параметры безопасности браузера , включив эту функцию: Инструменты - Свойства обозревателя - Безопасность - Пользовательский уровень:

alt text

2 голосов
/ 18 сентября 2009

Во-первых, его внешний вид не одинаков во всех браузерах, а во-вторых, эта функциональность давно отключена по умолчанию в большинстве браузеров по соображениям безопасности. *

В любом случае, JavaScript для этого прост: window.status = "my text"

0 голосов
/ 18 сентября 2009

использование

window.status = "whatever you want"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...