Как запустить функцию JavaScript, используя # в URL? - PullRequest
0 голосов
/ 21 февраля 2011

Привет, все это началось, когда я запустил функцию (давайте назовем ее loadround), которая изменила innerHTML iframe. теперь, когда загрузочный фрейм был загружен, в iframe были ссылки, которые после нажатия изменили бы страницу iframe. Единственная проблема - когда я нажимаю кнопку «Назад», страница загрузки исчезла. Я думал об этом много раз безрезультатно. поэтому я попробовал этот код.

<a href="javascript:void(loadround('parameter1','parameter2'))">loadround</a>

затем

function loadround(a,b){
window.location.hash = "#loadround('"+a+"','"+b+"')";

var code = "<(h2)>"+a+"</(h2)><(h2)>"+b+"</(h2)>"
   var iFrame =  document.getElementById('iframe');
   var iFrameBody;
   iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0]
  iFrameBody.innerHTML = code;
 }

(скобки в h2 являются преднамеренными) тогда я попытался бы перезагрузить функцию, возможно, с помощью функции onload, но сейчас я тестировал с простым href следующим образом.

function check(){
var func = location.hash.replace(/#/, '')
void(func);
}
<a href="javascript:check()">check</a>  

к сожалению, контрольный код не работает, и я почти уверен, что есть более простой способ сделать это. Я попытался изменить SRC iframe вместо innerhtml, и была та же проблема. заранее спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2011

Современные браузеры начинают поддерживать событие window.onhashchange

Тем временем вы можете использовать обходной путь, предложенный Лекенштейном, или, может быть, вы найдете здесь что-то полезное: JavaScript / jQuery - обходной путь события onhashchange

0 голосов
/ 21 февраля 2011

Вы неправильно понимаете функцию void, которая просто гарантирует, что возвращаемое значение не определено.Это предотвращает навигацию браузера, когда вы помещаете его в ссылку.Вы можете проверить это самостоятельно, вставив в браузер следующие адреса:

javascript:1        // note: return value 1, browser will print "1" on screen
javascript:void(1)  // note: undefined return value, browser won't navigate away

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

Пример;каждые 50 миллисекунд следите за изменениями в хеш-части и вставьте в элемент с идентификатором targetElement заголовок с хеш-частью.Если хеш-часть недействительна, замените текущую запись на home.

var oldHash = '';
function watchHash(){
    // strip the first character (#) from location.hash
    var newHash = location.hash.substr(1);
    if (oldHash != newHash) {
        // assume that the parameter are alphanumeric characters or digits
        var validated = newHash.match(/^(\w+)$/);
        // make sure the hash is valid
        if (validated) {
            // usually, you would do a HTTP request and use the parameter
            var code = "<h1>" + validated[1] + "</h1>";
            var element = document.getElementById("targetElement");
            element.innerHTML = code;
        } else {
            // invalid hash, redirect to #home, without creating a new history entry
            location.replace("#home");
        }
        // and set the new state
        oldHash = newHash;
    }
}
// periodically (every 50 ms) watch for modification in the hash part
setInterval(watchHash, 50);

HTML-код:

<a href="#home">Home</a>
<a href="#about">About Me</a>
<a href="#contact">Contact</a>
<div id="targetElement">
    <!-- HTML will be inserted here -->
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...