如何解决在iframe中形成POST而不影响历史记录
使用JS添加src托管在您的站点(第三方托管的脚本需要向其发送数据的域)上的IFRAME是否起作用?此IFRAME可能包含用于向您的/它的XMLHttpRequest发出请求的Javascript。域。至于从第三方站点获取实际数据到该IFRAME的方法,请尝试:http : //softwareas.com/cross-domain- communication-with-iframes。这是一个非常聪明的解决方案,涉及在IFRAME URL的末尾更改片段标识符(#something),然后您可以通过IFRAME中的JS进行读取。
这也是一个猜测,但是,如果您将上述过去的SO解决方案解决类似的历史记录问题(使用location.replace),希望可以让您在不中断历史记录堆栈的情况下进行更改锚点的操作。
解决方法
是否可以在iframe中提交表单而不影响浏览器的历史记录?
我已经实现了发送跨域POST请求。它使用Javascript在iframe中创建和提交表单。它可以工作,但是每个请求都会在浏览器的历史记录中添加一个项目。
有人知道解决这个问题的方法吗?我尝试使用innerHTML和createElement创建iframe。到目前为止,我还没有发现任何差异。
PS-我很想使用XMLHtttpRequest(“ Ajax”),但它不支持跨域发送数据。我很想使用GET而不是post,但是我需要发送超过2k的数据。
这是我的代码的一个版本。我已经尝试了许多变体并进行了全面搜索,但是我似乎找不到一个不会影响浏览器历史的解决方案。我相信这是不可能的-任何人都可以确认吗?
<html>
<head>
<script type="text/javascript">
function submit(params) {
var div = document.createElement('div');
div.innerHTML = '<iframe height="50" width="50"></iframe>';
document.body.appendChild(div);
var iframe = div.firstChild;
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.close();
var form = iframeDocument.createElement('form');
iframeDocument.body.appendChild(form);
form.setAttribute('action','http://some-other-domain.com/submit-here');
form.setAttribute('method','POST');
for (param in params) {
var field = iframeDocument.createElement('input');
field.setAttribute('type','hidden');
field.setAttribute('name',param);
field.setAttribute('value',params[param]);
form.appendChild(field);
}
form.submit();
}
window.onload = function() {
document.getElementById('button').onclick = function() {
submit({
'x' : 'Some Value','y' : 'Another Value','z' : new Date().getTime()
});
}
}
</script>
</head>
<body>
<h1>Example of using Javascript to POST across domains...</h1>
<input id="button" type="button" value="click to send">
</body>
</html>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。