这可能是一个奇怪的问题,所以我正在尽可能地解释我的问题。我有一个前端应用程序,这必须从另一个页面加载iframe-内容。然而,前端应用程序不允许简单地调用待集成应用程序的URL,而是通过某种代理地址来调用。即使是允许更改iframe-content的URL参数,也应该首先通过Spring后端运行,后者调用特定的页面,然后将其返回到前端。
我做错什么了?一开始,我试着创建一个非常简单的REST调用。请记住,当涉及到Spring时,我并不是很了解
@RequestMapping(value = "/api/include-content", method = RequestMethod.GET)
@CrossOrigin(origins = "http://localhost:4200")
public ResponseEntity<String> getIFrameContent() {
String server1 = <page_in_frame>;
RestTemplate rest;
HttpHeaders headers;
rest = new RestTemplate();
headers = new HttpHeaders();
headers.add("Content-Type", "text/html");
headers.add("Accept", "*/*");
HttpEntity<String> requestEntity = new HttpEntity<String>("", headers);
ResponseEntity<String> responseEntity = rest.exchange(server1, HttpMethod.GET, requestEntity, String.class);
return responseEntity;
}从它获得响应看起来很好,至少使用REST客户端进行了快速测试。所以我继续我的前端。我也尽可能地把它保持在基本的位置。
对于HTML模板
<div id="main-content" class="container-fluid">
<iframe id="iframe-content" frameborder="0" style="width: 90%; height: 700px">
</iframe>
</div>对于ts,我创建了一个像这样工作的方法。
redirectTo() {
this.httpClient.get("http://localhost:8080/api/include-content", {responseType: "text"}).subscribe(data => {
this.redirectData = data;
}, (error) => {
this.errorService.showError(error)
}, () => {
let iFrame = document.getElementById("powerBIFrame");
iFrame['src'] = 'data:text/html,' + encodeURIComponent(this.redirectData);
});
}在这种情况下,我没有考虑到的是,我没有得到任何资源。我只得到一个没有样式和/或功能的静态页面。单击链接上的任何链接都会创建一个空页面。我只能得出结论,我的方法本质上是有缺陷的,我需要(也许?)在我的后端上的某种代理功能?
发布于 2019-11-26 01:07:48
如果你使用的是iframe,那么你必须将一个url暴露给前端,因为在这种情况下,它需要一个源文件来加载。
如果你想使用一个后端生成的输出(spring),你可以简单地指向localhost/任何东西(就像你现在已经拥有的那样),并将它设置为src。这将会起作用,而且是微不足道的。
我会将响应有效负载注入到DOM中,而不是将其作为src属性传递,特别是如果它可能是一个很大的有效负载(就像power双向视图的情况一样)。
https://stackoverflow.com/questions/59036309
复制相似问题