Как открыть ссылки в iframe с target = «_ blank» в том же iframe? - PullRequest
1 голос
/ 05 февраля 2012

Я хочу открыть ссылки с target = «_ blank» и iframe в одном и том же iframe. Я попробовал код ниже, но он не работал. PHP решения приветствуются!

<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" type="text/javascript"></script>


<iframe src="http://www.htmlcodetutorial.com/linking/_A_TARGET_95y98y108y97y110y107y.html" height="100%" width="100%" ></iframe>

<script>
$('iframe a[target="_blank"]').live('click',function(e){
e.preventDefault(); //stops it opening in a new window
var url = $(this).attr('href');
$('iframe').load(url);
});

</script> 

1 Ответ

3 голосов
/ 05 февраля 2012

Вы пытались просто изменить целевой атрибут?

$('iframe a[target="_blank"]').each(function () {
    $(this).attr('target', '_self');
});

Также, Zain Shaikh совершенно правильно. Если источник iframe загружен из другого домена, вы не сможете сделать это из JavaScript.

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

Что касается нативного решения JavaScript:

function replaceWithSelf () {
    var iframes = document.getElementsByTagName('iframe');
    var i = 0;
    var j = 0;
    var anchors;
    for (i = 0; i < iframes.length; i += 1) {
        anchors = iframes[i].getElementsByTagName('a');
        for (j = 0; j < anchors.length; j += 1) {
            if (anchors[j].getAttribute('target') === '_blank') {
                anchors[j].setAttribute('target', '_self');
            }
        }
    }
}

Я проверил соответствующую часть на http://www.htmlcodetutorial.com/linking/_A_TARGET_95y98y108y97y110y107y.html (как описано в вашем вопросе). Используемый тестовый код:

var anchors = document.getElementsByTagName('a');
for (var j = 0; j < anchors.length; j += 1) {
    if (anchors[j].getAttribute('target') === '_blank') {
        anchors[j].setAttribute('target', '_self');
    }
}

который я запускал в консоли (Google Chrome). Код работал как задумано.

Чтобы повторить, если источник iframe загружен из другого домена, вы не сможете сделать это из JavaScript.

Другими словами, если домен, на котором выполняется ВАШ код, также не является http://www.htmlcodetutorial.com,, вы НЕ сможете сделать это в JavaScript.

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