html 页面不在iframe,关于html:指定iframe的内容而不是src到页面的内容

我目前正在处理一个表单,除了表单的所有普通字段外,它还具有上载图片的文件输入,一旦更改,就会将图片提交到iframe,然后通常将上载的图片加载到表单中,并为其修改字段(如名称和地理位置)。因为我不能嵌套表单,所以文件输入也包含在iframe中,所以最后我在iframe中使用iframe。所以简而言之,我有这样的东西:

加载在iframe中的html类似于(忽略html、head和body标记)

这很好,只是加载第一个iframe需要几秒钟,因此文件输入不会与页面的其余部分一起加载,并且在视觉上不理想。如果可以指定iframe内容而不需要加载另一个页面(由第一个iframe中的"file_input_url"指定),我可以解决这个问题。

所以,我的问题是,有没有一种方法可以在同一个文档中指定iframe内容,或者只能用src属性来指定它,所以需要加载另一个页面?

您可以将内容写入iframe文档。例子:

var doc = document.getElementById('FileFrame').contentWindow.document;

doc.open();

doc.write('

Hello world.');

doc.close();

然而,考虑到这种可能性,必须加载到iframe中的HTML是复杂的,并且完全用javascript处理它以便将其写入iframe将使实现变得过于模糊(直到我更喜欢保持原样为止)。

@Orlox:使用Ajax从服务器获取内容并注入。如果你不想这样做,用你的内容制作一个隐藏的div元素,并把它的内容放在iframe中和之间。

我对iframes限制了解得越多,我就越讨厌它们。

@Stackular i他可以使用Ajax,他也可以在iframe中简化src。

这个解决方案很好。我还没有在所有浏览器中进行测试,但这允许我在body标签中编写完整的HTML文档,并尊重这些属性。与所有其他解决方案不同,这似乎是在不一定程度上操纵的情况下,将HTML代码写入包含头部、身体标签的框架。它也不影响我处理的各种编码,JS解决方案调用escape(),将utf-8转换为%u####,但在帧中没有正确显示。

如何使用此方法转义单引号?其中一些是HTML重要的(例如class='example'),一些是CSS重要的(例如font-family:'verdana';),一些是内容(例如george o'malley)。

@dan:要转义撇号分隔的javascript字符串中使用的任何值,首先转义反斜杠,然后转义撇号。例如,使用c_输出代码中的字符串:doc.write('');。

@Guffa我自己(通过尝试和错误)计算出了一半,但另一半没有。谢谢你的小费!

iframe现在支持srcdoc,它可以用来指定要在内联框架中显示的页面的HTML内容。

IE不支持这个权利,但是你可以检查一下Canius的最新状态。

ie:github.com/jugglinmike/srcdoc-polyfill有一个polyfill/shim

您可以在src中使用data:URL:

var html = 'Hello from SO';

var iframe = document.querySelector('iframe');

iframe.src = 'data:text/html,' + encodeURIComponent(html);

iframe中srcdoc=…"和src="data:text/html,…"之间的差异。

使用javascript将HTML转换为数据:文本/HTML链接。

您甚至不需要任何javascript:如果转义,则可以内联指定src属性,例如在php:中使用rawurlencode。

结合Guffa所描述的,您可以使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用iframe加载跨域资源时,浏览器会使用同源策略进行限制,因此需要使用代理页面来解决跨域问题。ASP.NET中可以使用aspx页面来作为代理页面。 具体步骤如下: 1. 在项目中添加一个aspx页面,例如Proxy.aspx。 2. 在Proxy.aspx.cs文件中编写一个处理请求的方法,例如GetResource()。 3. 在GetResource()方法中使用WebRequest对象向目标资源发起请求,并获取响应数据。 4. 将响应数据返回给前端页面。 5. 在前端页面中使用iframesrc属性指定代理页面的地址,并将目标资源的地址作为参数传递给代理页面。 6. 在代理页面中获取目标资源的地址,并在GetResource()方法中使用该地址发起请求。 7. 将响应数据返回给前端页面,并在前端页面中使用iframe加载响应数据。 示例代码如下: Proxy.aspx.cs: ```csharp protected void Page_Load(object sender, EventArgs e) { // 获取目标资源的地址 string url = Request.QueryString["url"]; // 发起请求并获取响应数据 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string data = reader.ReadToEnd(); // 将响应数据返回给前端页面 Response.Clear(); Response.Write(data); Response.End(); } public void GetResource(string url) { // 构造代理页面的地址 string proxyUrl = "http://localhost:8080/Proxy.aspx?url=" + url; // 使用iframe加载代理页面 var iframe = document.createElement("iframe"); iframe.src = proxyUrl; document.body.appendChild(iframe); } ``` 前端页面: ```html <body> <script> GetResource("https://example.com/resource"); </script> </body> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值