Redirecionamento de Iframes com JavaScript: Métodos de Navegação

Entendendo os Métodos de Redirecionamento em Iframes

Em estruturas de páginas com iframes, diferentes métodos de redirecionamento controlam a navegação entre níveis. A propriedade top.location.href direciona para a página mais externa do contexto, enquanto parent.loctaion.href navega para a página pai imediata. Para alterar a URL da página atual, seja principal ou dentro de um iframe, utiliza-se window.location.href ou location.href.

top.location.href: Redirecionamento para a Página Mais Externa

Este exemplo demonstra uma chamada assíncrona para atualização de senha, seguida de redirecionamento para a página de login usando o contexto mais externo.

// Função para atualizar senha via API e redirecionar
const atualizarSenha = async (usuario, novaSenha, senhaAntiga, tokenAuth) => {
  try {
    const resposta = await fetch('https://api.exemplo.com/auth/alterar-senha', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${tokenAuth}`
      },
      body: JSON.stringify({
        nomeUsuario: usuario,
        senhaNova: novaSenha,
        senhaAnterior: senhaAntiga
      })
    });
    const dados = await resposta.json();
    if (dados.status === 'sucesso') {
      // Limpar armazenamento local
      localStorage.removeItem('tokenUsuario');
      // Redirecionar para a página de login no nível mais alto
      top.location.href = './login.html';
    } else {
      document.getElementById('mensagemErro').textContent = dados.mensagem;
    }
  } catch (erro) {
    console.error('Falha na requisição:', erro);
  }
};

parent.location.href: Navegação para a Página Pai

Em um controlador AngularJS, esta função recupera uma lista de funções e trata erros redirecionando a página pai.

// Controlador AngularJS para gerenciamento de funções
angular.module('sistema').controller('FuncoesCtrl', function($scope, $http) {
  $scope.carregarFuncoes = function() {
    $http.get('/api/funcoes', { params: { chave: $scope.chaveAcesso } })
      .then(function(resposta) {
        $scope.listaFuncoes = resposta.data;
        // Identificar a função selecionada a partir de um campo oculto
        const idSelecionado = document.getElementById('idFuncaoSelecionada').value;
        $scope.funcaoAtual = $scope.listaFuncoes.find(f => f.id === idSelecionado) || $scope.listaFuncoes[0];
      })
      .catch(function(erro) {
        // Redirecionar a página pai em caso de falha
        parent.location.href = './erro.html';
      });
  };
  
  $scope.atualizarModelo = function(funcaoId) {
    $http.get(`/api/modelos-funcao/${funcaoId}`, { params: { chave: $scope.chaveAcesso } })
      .then(function(resposta) {
        document.getElementById('campoExperiencia').value = resposta.data.frequencia;
      });
  };
});

window.location.href: Redirecionamento da Página Atual

Ao submeter um formulário parra adicioanr um tipo de pagamento, este método atualiza a URL da página atual após sucesso.

// Manipulação de envio de formulário para cadastro
document.getElementById('formCadastro').addEventListener('submit', async function(evento) {
  evento.preventDefault();
  const formData = new FormData(this);
  const dados = {};
  formData.forEach((valor, chave) => { dados[chave] = valor; });
  
  try {
    const resposta = await fetch('/api/tipos-pagamento', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        identificador: dados.id,
        nomePlataforma: dados.nomePlataforma,
        urlPlataforma: dados.urlPlataforma,
        tipoPlataforma: dados.tipoPlataforma,
        tokenAutenticacao: dados.token
      })
    });
    const resultado = await resposta.json();
    if (resultado.sucesso) {
      // Redirecionar para a lista após o cadastro
      window.location.href = './lista-pagamentos.html';
    } else {
      document.getElementById('avisoErro').textContent = resultado.mensagem;
    }
  } catch (erro) {
    // Redirecionar para página de erro em caso de falha na requisição
    window.location.href = './pagina-erro.html';
  }
});

Tags: javascript AngularJS iframe redirecionamento-de-páginas fetch-API

Publicado em 6-1 14:22 por Thomas