由于您访问异地服务器的计算机位于可以访问远程系统的 VPN 上(并假设此远程系统在您的控制之下),因此您可以让异地服务器返回一些 JavaScript 以通过 AJAX 提取数据——在这种情况下,一个完整的 HTML 页面——它需要从远程系统使用类似 JSONP 的策略。
我过去曾在一些小型项目中使用过这种技术。
从那里,您可以自由地对数据做任何您想做的事情——修改它、按原样返回它,或者以其他方式。
就个人而言,如果可能的话,我会避免使用框架。当然,当时间紧迫时,没有什么是禁区;)
但是,如果远程系统不在您的控制之下(并且他们没有 kickass CORS 交叉访问策略),那么正如您在问题正文中所说,您唯一的选择是框架。这是一个例子:
<!-- If the remote system is NOT under your control, it CANNOT respond with the X-Frame-Options header set to SAMEORIGIN or DENY! -->
<iframe id="inlineframe" src="http://www.randomwebsite.com" frameborder="0" scrolling="auto" width="800" height="300" marginwidth="5" marginheight="5" ></iframe>
//Depending on the JS you put here, you may get some "unsafe Javascript" warnings from certain browsers
~function()
{
var frame = document.getElementById('inlineframe'),
ref = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument;
// ref is now a reference to the document of the content within the iframe
// You can now do your getElementById/getElementByTagName etc. and otherwise
// manipulate the response as you please.
console.log(ref);
}();
可以在这里找到一个工作示例:http: //jsfiddle.net/FTudJ/
iframe 的内容应该是远程页面的提交结果,或者远程服务器响应的任何内容。如果您不想修改任何内容,那么您甚至不需要 Javascript 组件。
关键是您指定为 iframe 源的 URL。现在,如果远程系统不支持表单提交的 GET 请求(在您的示例代码中,我看到一个“POST”方法),再加上您无法控制它并且您的异地系统无法访问它无论如何,您唯一的其他选择是:
无需直接提供表单的提交 URL,只需将表单的典型访问 URL 提供给 iframe。从那里,使用 JavaScript 用必要的值填充表单,然后在 iframe 中提交表单,就像您是用户一样。从那里,您可以将结果刮回到 JavaScript 中,或者简单地按原样显示它们。
找到一种方法让您的异地服务器进入 VPN 网络,以便它可以代表您与远程系统进行通信。当然,如果这很容易,我想你会先做到这一点!
将您的用户重定向到远程站点——可能使用框架集 + 横幅框架,就像 Google 过去所做的那样,让他们在那里做他们需要做的事情,然后告诉他们完成后回来。
--
我看到你正在使用 PHP。只要执行 PHP 的服务器可以访问可以访问此远程系统的 VPN(通过传统的 HTTP),服务器端的简单 curl 调用就足够了,因为您可以使用 AJAX 传递结果给客户。
这些链接可能会有所帮助: