Pergunta

Eu estou tentando executar um HTTP GET do meu site para outro site que é trazido via iframe.

No Firefox, você pode ver na fonte que a url correta está no iframe src junto com ele de parameters-- correta e ele funciona.

No IE, você pode ver na fonte que a url correta está no iframe src junto com ele de parameters-- correto e ele não funciona ...

Existe algo sobre IE que não deixá-lo passar parâmetros através de um iframe na querystring?

Eu tentei atualizar o iframe no IE, eu tentei atualizar minha página & do iframe no IE, e eu tentei copiar o url e está colando-lo para o src iframe (forçando-o a refrescar como se Eu só entrou na barra de endereços para essa janela de iframe). Ainda sem sorte!

Alguém sabe por que isso está acontecendo, ou tem alguma sugestão para tentar contornar esta situação?

Editar: Não consigo dar um link para isso porque o site requer uma senha e login credenciais para tanto o nosso site e local do nosso fornecedor. Mesmo que eu poderia fazer uma conta de teste em nosso site, não faria qualquer bom para o processo de testes, porque eu não posso fazer o mesmo para o site do fornecedor. Quanto ao código, tudo o que está fazendo é criando o src a partir do código de backend no carregamento da página e definindo o atributo src do back-end ...

//Backend code to set src
mainIframe.Attributes["src"] = srcWeJustCreated;

//Front end iframe code
<iframe id="mainIframe" runat="server" />

Editar: Problema nunca foi resolvido. Resposta auto aceite porque a recompensa expirado. I vai voltar a fazer esta pergunta com mais informações e um link para a página quando o nosso site está mais perto de ir ao vivo.


Obrigado,
Matt

Foi útil?

Solução

Ao as configurações de segurança padrão em parâmetros de consulta do IE são bloqueados no iframe. Na guia Segurança em Opções da Internet definir o nível de segurança para baixo. Se isso corrige o problema, então você sabe que é o seu problema. Se o site é para clientes externos, em seguida, esperando que eles desligar as configurações de segurança é provavelmente razoável, de modo que você pode ter que encontrar um trabalho em torno.

Outras dicas

Vamos dizer que seu site é www.acme.com e a fonte iframe está em www.myvendor.com .

IIRC, a maioria das configurações de segurança de nível de domínio não se preocupam com o nome da máquina, então adicionar um CNAME DNS para o seu arquivo de zona para myvendor.acme.com , de volta pontiagudo para www. myvendor.com . Então, em sua IFRAME, defina a origem usando seu alias hostname.

Outra solução poderia ser a de ter o seu Javascript definir o src para um roteiro redirecionador em seu próprio servidor (e, portanto, dentro do seu domínio). Seu script, então, simplesmente redirecionar o IFRAME para a URL "correta" com os mesmos parâmetros.

Se lhe convier, você pode se comunicar entre sites com identificadores de fragmentos. Você pode encontrar um artigo aqui: http: // tagneto .blogspot.com / 2006/06 / cross-domain-frame-comunicação-with.html

O que disse BYK. Eu acho que o que está acontecendo é que você está recebendo uma URL que é muito grande para o IE para lidar. Estou vendo que você está tentando enviar variável chamada src, que é provavelmente muito tempo, mais de 4k. Corri para este problema antes, e este foi o meu código. Observe o comentário sobre IE. Note também que provoca um problema com o Firefox, em seguida, que é abordada em outro comentário.

var autoSaveFrame = window.frames['autosave'];
// try to create a temp form object to submit via post, as sending the browser to a very very long URL causes problems for the server and in IE with GET requests.
var host = document.location.host;
var protocol = document.location.protocol;
// Create a form
var f = autoSaveFrame.document.createElement("form");
// Add it to the document body
autoSaveFrame.document.body.appendChild(f);
// Add action and method attributes
f.action = protocol + '//' + host + "/autosave.php"; // firefox requires a COMPLETE url for some reason! Less a cryptic error results!
f.method = "POST"
var postInput = autoSaveFrame.document.createElement('input');
postInput.type = 'text'
postInput.name = 'post';    
postInput.value = post;
f.appendChild(postInput);
//alert(f.elements['post'].value.length);
// Call the form's submit method
f.submit();

Com base na resposta de Mike, a solução mais fácil no seu caso seria a utilização de "parâmetro esconderijo" para converter todos os parâmetros GET em um único URL.

A maneira mais escalável seria que cada 'pasta' no URL consistir do parâmetro, em seguida, uma vírgula, então o valor. Por exemplo, você usaria essas URLs em seu aplicativo:

http://example.com/app/param,value/otherparam,othervalue http://example.com/app/param,value/thirdparam,value3

Qual seria o equivalente a estes:

http://example.com/app?param=value&otherparam=othervalue http://example.com/app?param=value&thirdparam=value3

Isso é muito fácil no Apache com .htaccess, mas parece que você está usando o IIS por isso vou deixar isso para você pesquisar a implementação exata.

EDIT: acabei de voltar a este e percebeu que não seria possível para você implementar o acima em um domínio diferente se você não o possui: p No entanto, você pode fazê-lo do lado do servidor como este:

  • configurar o parâmetro de esconderijo acima em seu próprio servidor como um script especial (pode não ser necessário se o IE não se importa começar a partir do mesmo servidor).
  • Em Javascript, construir a URL de aparência estática dos vários parâmetros.
  • Ter o script no seu servidor usar os parâmetros e ler a URL externa e sua saída será, ou seja, obter o lado do servidor de conteúdo. Esta questão pode te ajudar com isso.

Portanto, o seu URL iframe seria:

http://yoursite.com/app/param,value/otherparam,othervalue

E essa página iria ler e exibir a URL:

http://externalsite.com/app?param=value&otherparam=othervalue

Tente usar um método indireto. Criar um formulário. Definir seu parâmetro de ação para a base url deseja navegar. Definir seu método para POST. Defina o seu alvo para o seu iframe e, em seguida, criar os parâmetros necessários como entradas escondidas. Finalmente, enviar o formulário. Ele deve funcionar uma vez que trabalha com POST.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top