我已经知道可以通过Response.Write("<iframe id='frmDiagram' runat='server'></iframe>");
但是这样写出来的iframe不能在服务器端这样赋值
frmDiagram.InnerHtml="...(一个网页html代码)";-----------------------------------------------------------
那么不通过在客户端写代码,只通过服务器端如何创建一个iframe,并且赋给它一些属性?
---------------------------------------------------------------
或者能给
Response.Write("<iframe id='frmDiagram' runat='server'></iframe>");
这样写出来的控件在服务器端赋值也可以
frmDiagram.InnerHtml="...(一个网页html代码)";
请高手指教,多谢
解决方案 »
- 如何实现cache共享
- 100分请教几个问题:0x20和0x10是什么意思,知道的麻烦给指教下,先表示感谢了!
- 网页中显示带有表格的文章时出现超多换行的问题
- OutputCache指令里的SqlDependency="Northwind:Customers" 如何通过c#代码实现?
- 请问如何从一个XmlDocument里边将此XML以字符串返回啊
- 问个关于三层架构开发的问题
- Datagrid超连接列中,如何传递两个参数字符串proID,funID
- 求助:在线程内调用数据库连接为什么会出错????
- asp.net里面怎么样请求执行asp页面?在线等待!!谢谢!!
- 关于ListBox控件的双击?
- 重要问题,在线等!!!
- 求助!在 asp.net中将照片存到数据库中的方法(使用vb.net+sql server)
documeng.write('<html>....</html>');
因为一个网页的html代码中包含很多特殊字符,最后javascript根本执行不了,网页上面绘出现乱码
,我希望在服务器端解决,谢谢
<iframe src=<% =str %/>code:
public string str
没有page,只有code,通过output.Write("<iframe></iframe>");
但是现在我需要将取回的一个网页的html代码写入到iframe中
也就是类似于
iframe.InnerHtml="<html>....其它html代码...</html>";]
该怎么样将服务器端取得的html代码写入到客户端的iframe中,而不是直接赋一个src不要告诉我用javascript,因为已经证明行不通
具体可以参见
http://community.csdn.net/Expert/topic/4061/4061861.xml?temp=.6085474那么怎样在服务器端通过控制iframe来实现那?
请指教,谢谢
iFraem.InnerHtml赋值,因为我要赋的值是html,里面包含很多特殊字符和javascript代码,用javascript就会出现乱码,具体描述如下:
------------------------------------------------
原来在页面上注册的javascript函数如下:
<script language='javascript'>
<!--
function OpenModelOpenAndWriteContent(content,target,para)
{
var win;
win = window.open( 'about:blank','','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
win.document.write(content);
}
//-->
</script> 调用这个函数后页面的效果如下:<script language='javascript'>OpenModelOpenAndWriteContent("<script language='javascript'>
function SetApplyDate() //设置当前日期
{
var now = new Date();
var year = now.getYear();
var month = now.getMonth()+1;
var day = now.getDate();
Form1.txtApplyTime.value = year+'-'+month+'-'+day;
}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>填写请假单</title>
<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<base target="_self">
<script language="javascript" id="clientEventHandlersJS">
function window_onload()
{
//Close the browser window
if ('' == 'true')
{
window.close();
}
}</script>
</HEAD>
<body onload="return window_onload()" bgColor="#c0d8f8">
<FONT face="宋体">
<form name="Form1" method="post" action="Request.aspx" id="Form1" enctype="multipart/form-data">
<input type="hidden" name="__VIEWSTATE" value="dDwxMDUxNDM3ODAwO3Q8cDxsPFBsYW5TZXJ2ZXI7U2VyaWFsTm87WE1MRG9jdW1lbnQ7Q2xvc2VQYWdlO0FsbG9jYXRlO1hNTERvY0luZGV4Oz47bDxmYW5naHVpO1xlO2w8PjtvPGY+O288dD47bDw+Oz4+O2w8aTwwPjs+O2w8dDw7bDxpPDM+O2k8OD47aTwxMz47aTwxOD47aTwyMj47aTwzMz47aTw0Mz47aTw0Nj47aTw0OT47aTw1OD47aTw2ND47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8dDw7O2w8aTwwPjs+Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7RW5hYmxlZDs+O2w8MDowMDowMDtvPGY+Oz4+Oz47Oz47Pj47Pj47PsGwZL89+EMsD/sAs2iDvUFSswzI" /><FONT face="宋体"><FONT face="宋体"></FONT>
<TABLE id="Table1" cellPadding="1" width="500" align="center" border="0" cellSpacing="1">
<TBODY>
<TR>
<TD align="center" colSpan="2"><b><u>请假单</u></b></TD>
</TR>
<TR>
<TD></TD>
<TD width="300"></TD>
</TR>
<TR>
<TD><span id="Label6">部门:</span></TD>
<TD width="300"><input name="txtDepartment" type="text" id="txtDepartment" tabindex="1" /><span id="RequiredFieldValidator1"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD><span id="Label7">职位:</span></TD>
<TD width="300"><input name="txtPosition" type="text" id="txtPosition" tabindex="1" /><span id="RequiredFieldValidator2"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD><span id="Label1">姓名:</span></TD>
<TD width="300"><input name="txtName" type="text" id="txtName" tabindex="1" /><span id="RequiredFieldValidator3"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD style="HEIGHT: 13px"><span id="Label4">请假类型:</span></TD>
<TD style="HEIGHT: 13px"><select name="K2DropDownList1" id="K2DropDownList1">
<option selected="selected" value="事假">事假</option>
<option value="病假">病假</option>
<option value="婚假">婚假</option>
<option value="丧假">丧假</option>
<option value="产假">产假</option>
<option value="工伤假">工伤假</option>
<option value="晚婚">晚婚</option>
<option value="年假">年假</option></select></TD>
</TR>
<TR>
<TD style="HEIGHT: 19px" vAlign="top">
<span id="Label2" name="startdatevalue">开始时间:</span>
</TD>
<TD style="HEIGHT: 19px" vAlign="top">
<input name="txtStartTime" type="text" id="txtStartTime" tabindex="1" />
<input type="submit" name="btnStartDate" value="请选择" id="btnStartDate" /><span id="RequiredFieldValidator4"><font color="Red">*</font></span>
</TD>
</TR>
<TR>
<TD style="HEIGHT: 19px" vAlign="top"><span id="Label3">结束时间:</span></TD>
<TD vAlign="top">
<input name="txtEndTime" type="text" id="txtEndTime" tabindex="1" />
<input type="submit" name="btnEndDate" value="请选择" id="btnEndDate" /><span id="RequiredFieldValidator5"><font color="Red">*</font></span> </TD>
</TR>
<TR>
<TD style="HEIGHT: 26px"><span id="Label8">请假期间:</span></TD>
<TD style="HEIGHT: 26px"><input name="txtLeaveDays" type="text" value="0" id="txtLeaveDays" tabindex="1" /> <span id="Label10">天</span><input name="txtLeaveHours" type="text" value="0" id="txtLeaveHours" tabindex="1" /> <span id="Label11">小时</span><input name="txtLeaveMinutes" type="text" value="0" id="txtLeaveMinutes" tabindex="1" /> <span id="Label12">分钟</span> </TD>
</TR>
<TR>
<TD style="HEIGHT: 26px"><FONT face="宋体"><span id="Label5">Email:</span> </FONT>
</TD>
<TD style="HEIGHT: 26px"><input name="txtEmail" type="text" id="txtEmail" tabindex="5" /><span id="RequiredFieldValidator7"><font color="Red">*</font></span>
</FONT></TD></TR>
<TR>
<TD style="HEIGHT: 26px"><span id="Label9">申请日期</span></TD>
<TD style="HEIGHT: 26px"><input name="txtApplyTime" type="text" value="0:00:00" readonly="readonly" id="txtApplyTime" disabled="disabled" tabindex="5" /></TD>
</TR>
<TR>
<TD align="center" colSpan="2">
<P> </P>
<P>
<input type="submit" name="K2Button1" value="确定" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="K2Button1" tabindex="6" /></P>
</TD>
</TR>
</TBODY></TABLE> </FONT><script language='javascript'>
SetApplyDate();
</script>
</form></FONT>
</body>
</HTML>
",'_blank','');</script>并且页面有javascript错误提示
-----------------------------------------具体见
http://community.csdn.net/Expert/topic/4061/4061861.xml?temp=.6085474请指教,谢谢
在<iframe></iframe>中间也有一个网页的html代码,可是在客户端的网页上面iframe上面是空白,
客户端察看源代码如下:
------------------------------------------------------------------------<span><iframe height='500' width='500'> <script language='javascript'>
function SetApplyDate() //设置当前日期
{
var now = new Date();
var year = now.getYear();
var month = now.getMonth()+1;
var day = now.getDate();
Form1.txtApplyTime.value = year+'-'+month+'-'+day;
}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>填写请假单</title>
<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<base target="_self">
<script language="javascript" id="clientEventHandlersJS">
function window_onload()
{
//Close the browser window
if ('' == 'true')
{
window.close();
}
}
</script>
</HEAD>
<body onload="return window_onload()" bgColor="#c0d8f8">
<FONT face="宋体">
<form name="Form1" method="post" action="Request.aspx" id="Form1" enctype="multipart/form-data">
<input type="hidden" name="__VIEWSTATE" value="dDwxMDUxNDM3ODAwO3Q8cDxsPFBsYW5TZXJ2ZXI7U2VyaWFsTm87WE1MRG9jdW1lbnQ7Q2xvc2VQYWdlO0FsbG9jYXRlO1hNTERvY0luZGV4Oz47bDxmYW5naHVpO1xlO2w8PjtvPGY+O288dD47bDw+Oz4+O2w8aTwwPjs+O2w8dDw7bDxpPDM+O2k8OD47aTwxMz47aTwxOD47aTwyMj47aTwzMz47aTw0Mz47aTw0Nj47aTw0OT47aTw1OD47aTw2ND47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8dDw7O2w8aTwwPjs+Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPFxlOz4+Oz47Oz47dDxwPHA8bDxUZXh0Oz47bDxcZTs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8MDs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8XGU7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7RW5hYmxlZDs+O2w8MDowMDowMDtvPGY+Oz4+Oz47Oz47Pj47Pj47PsGwZL89+EMsD/sAs2iDvUFSswzI" /> <FONT face="宋体"><FONT face="宋体"></FONT>
<TABLE id="Table1" cellPadding="1" width="500" align="center" border="0" cellSpacing="1">
<TBODY>
<TR>
<TD align="center" colSpan="2"><b><u>请假单</u></b></TD>
</TR>
<TR>
<TD></TD>
<TD width="300"></TD>
</TR>
<TR>
<TD><span id="Label6">部门:</span></TD>
<TD width="300"><input name="txtDepartment" type="text" id="txtDepartment" tabindex="1" /><span id="RequiredFieldValidator1"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD><span id="Label7">职位:</span></TD>
<TD width="300"><input name="txtPosition" type="text" id="txtPosition" tabindex="1" /><span id="RequiredFieldValidator2"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD><span id="Label1">姓名:</span></TD>
<TD width="300"><input name="txtName" type="text" id="txtName" tabindex="1" /><span id="RequiredFieldValidator3"><font color="Red">*</font></span></TD>
</TR>
<TR>
<TD style="HEIGHT: 13px"><span id="Label4">请假类型:</span></TD>
<TD style="HEIGHT: 13px"><select name="K2DropDownList1" id="K2DropDownList1">
<option selected="selected" value="事假">事假</option>
<option value="病假">病假</option>
<option value="婚假">婚假</option>
<option value="丧假">丧假</option>
<option value="产假">产假</option>
<option value="工伤假">工伤假</option>
<option value="晚婚">晚婚</option>
<option value="年假">年假</option></select></TD>
</TR>
<TR>
<TD style="HEIGHT: 19px" vAlign="top">
<span id="Label2" name="startdatevalue">开始时间:</span>
</TD>
<TD style="HEIGHT: 19px" vAlign="top">
<input name="txtStartTime" type="text" id="txtStartTime" tabindex="1" />
<input type="submit" name="btnStartDate" value="请选择" id="btnStartDate" /><span id="RequiredFieldValidator4"><font color="Red">*</font></span>
</TD>
</TR>
<TR>
<TD style="HEIGHT: 19px" vAlign="top"><span id="Label3">结束时间:</span></TD>
<TD vAlign="top">
<input name="txtEndTime" type="text" id="txtEndTime" tabindex="1" />
<input type="submit" name="btnEndDate" value="请选择" id="btnEndDate" /><span id="RequiredFieldValidator5"><font color="Red">*</font></span>
</TD>
</TR>
<TR>
<TD style="HEIGHT: 26px"><span id="Label8">请假期间:</span></TD>
<TD style="HEIGHT: 26px"><input name="txtLeaveDays" type="text" value="0" id="txtLeaveDays" tabindex="1" /> <span id="Label10">天</span><input name="txtLeaveHours" type="text" value="0" id="txtLeaveHours" tabindex="1" /> <span id="Label11">小时</span><input name="txtLeaveMinutes" type="text" value="0" id="txtLeaveMinutes" tabindex="1" /> <span id="Label12">分钟</span> </TD>
</TR>
<TR>
<TD style="HEIGHT: 26px"><FONT face="宋体"><span id="Label5">Email:</span> </FONT>
</TD>
<TD style="HEIGHT: 26px"><input name="txtEmail" type="text" id="txtEmail" tabindex="5" /><span id="RequiredFieldValidator7"><font color="Red">*</font></span>
</FONT></TD></TR>
<TR>
<TD style="HEIGHT: 26px"><span id="Label9">申请日期</span></TD>
<TD style="HEIGHT: 26px"><input name="txtApplyTime" type="text" value="0:00:00" readonly="readonly" id="txtApplyTime" disabled="disabled" tabindex="5" /></TD>
</TR>
<TR>
<TD align="center" colSpan="2">
<P> </P>
<P>
<input type="submit" name="K2Button1" value="确定" onclick="if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="K2Button1" tabindex="6" /></P>
</TD>
</TR>
</TBODY></TABLE> </FONT> <script language='javascript'>
SetApplyDate();
</script>
</form></FONT>
</body>
</HTML>
</iframe></span>-------------------------------------------------
为什么是空白的那?
如何才能让iframe中的网页显示出来?
还是这样将html代码放在iframe标志中间就是错误的
请指教
----------------------------------------------
孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
<script>
I1.document.createDocumentFragment.body;
I1.document.write('<script>alert(\'x\')<\/script>');
</script>
因为用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
aspx<form id="Form1" method="post" runat="server">
<iframe src="http://www.sohu.com" width="200" height="100" id="IFRAME1" runat="server">
</form>
cs
protected System.Web.UI.HtmlControls.HtmlGenericControl IFRAME1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页
this.IFRAME1.Attributes["src"] = "http://www.caae.com.cn";
}
---------------------------
首先谢谢你的回复:
但是我要的是要在服务器端将html代码赋给iframe,
而且我的代码是在自定义控件中,没有page,只有code.
我的代码原理是模拟身份验证,用一个模拟的身份给服务器发送请求以后,
服务器返回这个网页的html代码:
相关代码如下:----------------------------
string url ;
string respstr;
url = "http://www.baidu.com";
respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
myWebRequest.PreAuthenticate=true;
NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
myWebRequest.Credentials=networkCredential;
WebResponse myWebResponse=myWebRequest.GetResponse(); Stream stream = myWebResponse.GetResponseStream();
StreamReader sr = new StreamReader(stream);
//以字符串形式读取数据流
respstr = sr.ReadToEnd();
sr.Close(); --------------------------
这里的respstr就是得到的html代码。
下一步我想将这段html代码放在iframe中,
有人可能问为什么放在iframe中那?
因为这段html代码得到的网页要完成提交功能,
所以它必须作为一个单独的网页运行
---------------------------------------
protected System.Web.UI.HtmlControls.HtmlGenericControl IFRAME1 = new HtmlGenericcontrol("IFRAME");
IFRAME1.Attribuates["src"] =
this.Controls.Add( IFRAME1 );
这样倒是可以,但是因为要添加为"src"属性的网页是基于windows验证的,在执行页面的时候会弹出用户名和密码提示,现在我的目的是屏蔽掉用户名和密码提示,所以就要模拟windows身份,用的是下面的代码:
----------------------------
string url ;
string respstr;
url = "http://../.../request.aspx"; //一个基于windows验证的网页
respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
myWebRequest.PreAuthenticate=true;
NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
myWebRequest.Credentials=networkCredential;
WebResponse myWebResponse=myWebRequest.GetResponse(); Stream stream = myWebResponse.GetResponseStream();
StreamReader sr = new StreamReader(stream);
//以字符串形式读取数据流
respstr = sr.ReadToEnd();
sr.Close(); --------------------------
我看了你的回贴,分析的很好,
可是即使我用用户控件还是回避不了这个问题我怎么样将回传回来的html代码呈现在页面上,
这段html代码要具有单独一个网页的功能,
能够完成提交功能,
而且不与父页面上的功能冲突用用户控件还是一样请指教
string url ;
string respstr;
url = "http://../.../request.aspx"; //一个基于windows验证的网页
respstr = "";WebRequest myWebRequest=WebRequest.Create(url);
myWebRequest.PreAuthenticate=true;
NetworkCredential networkCredential=new NetworkCredential( username , password , domain );
myWebRequest.Credentials=networkCredential;
WebResponse myWebResponse=myWebRequest.GetResponse(); Stream stream = myWebResponse.GetResponseStream();
StreamReader sr = new StreamReader(stream);
//以字符串形式读取数据流
respstr = sr.ReadToEnd();
sr.Close(); --------------------------现在是如何把它写入iframe中。---------------------------
除了这种方法以外,我还试验过在客户端用xmlHttp.Post的方法,这种方法访问我自己机器上的网页没有问题,但是如果在其他机器上,就提示“没有权限”,也就是说在其他机器上即使用用户名和密码进行post,也还是没有权限,可能是因为windows对这种客户端方式的post权限进行了限制。---------------------------------------
我也想过在服务器端验证以后,在服务器端打开网页,但是服务器端除了用Response.write("<script>window.open('...');</script>")和Page.RegisterStartUpScript("<script>window.open('...');</script>");以外,还有一个超链接,但是这样的打开方式即使在服务器端进行了身份模拟,还是会弹出用户名和密码的提示,不知道有没有其他方式的服务器端打开链接的方法可以将验证信息带进去?
http://support.microsoft.com/default.aspx?kbid=832414
首先谢谢你的回复,但是还是不能奏效,具体描述如下:
---------------------------------------------------------
你给出的链接我看了,里面有这样的描述:
---------------------------------------
当您使用下列格式进行 XMLHTTP 调用时:Xmlhttp.open("GET",
"http://someone:[email protected]/default.asp",
false, "", "");Xmlhttp.open("GET",
"http://someone:[email protected]/default.asp",
false, "someone", "passwd");Xmlhttp.open("GET",
"http://www.northwindtraders.com/default.asp",
false, "someone", "mypass");调用失败,您收到以下错误信息:
Invalid Syntax Error
而下面的调用却能够成功:Xmlhttp.open("GET", "http://www.northwindtraders.com/default.asp", false, "", "");
------------------------------------------
你的这篇文章也给出了这种情况的解决办法,就是安装一个修复程序,
我安装了这个修复程序,还是提示没有权限,可能是因为我现在出现的
情况不是这篇文章里面描述的情况,现在我的情况是:
--------------------------------------
我用下列的javascript代码进行模拟身份post操作:
--------------------------------------------------
var sUserName = getCookie('FGUserName');
var sPassword = getCookie('FGUserPassword');
var sDomain = getCookie('FGUserDomain');
if ( sUserName == null )
{
sUserName = '';
}
if ( sPassword == null )
{
sPassword = '';
}
if ( sDomain = null )
{
sDomain == '';
}
if ( sUserName != '' )
{
var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP');
xmlHttp.open('GET' , url , false , sUserName , sPassword );
//xmlHttp.open('GET' , url , true , sUserName , sPassword );
xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );
xmlHttp.Send();
if( xmlHttp.status == '200' ) <--执行到这里时, xmlHttp.status 的值是401,表示没有权限
{
window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
location.reload();
}
}
-----------------------------------------
注意上面代码中箭头的位置,xmlHttp.status 的值是401,表示没有权限 ,我安装了补丁还是这样
-----------------------------------------
看来楼上的给出的方法跟我的问题有点差异,但是非常感谢,还请各位继续指教,感激涕零
-----------------------------------------------可是得到的html代码要能执行提交功能,所以不能与页面上的其他代码混淆,必须是一个独立的页面,除了iframe好像没有其他的控件了吧
----------------------------------------------------2.把获得的html先写入一个文本文件总能做到吧
--------------------------------------
我的代码都是放在用户控件中,由浏览器执行,所以没有操作文件的权限,
另外不光要将html代码写进去,而且还要将用户验证信息写进去
这样来说,即使用用户控件也不能避免使用iframe,请楼上想想还有什么其他好的方法,我已经绞尽脑汁了
谢谢
我用来msxml4.0,结果还是提示说没有权限:
相关的javascript代码如下:
__________________________________ var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');
xmlHttp.open('GET' , url , false , sUserName , sPassword );
//xmlHttp.open('GET' , url , true , sUserName , sPassword );
xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );
xmlHttp.Send();
alert( xmlHttp.status);
------------------------------------------------------------------
在我本机上用域用户登录打开我机器上的网页弹出的xmlHttp.status的值是200(表示成功),
但是在别的机器上用域用户登录post我机器上的网页弹出的xmlHttp.status的值是401(表示没有权限),
是不是可以设置我机器上的iis,让其他机器上的用户可以用xmlHttp访问我机器上的网页。
这里要说明两点:
1. 我机器暂时作为服务器,我机器上的网页都是基于windows验证的,因为项目的原因,必须用windows验证
2. 所有访问我机器的用户都是一个域里面的域用户但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问我机器上的网页,请指教,谢谢!
xmlHttp.open('GET' , url , false , sUserName , sPassword );
里面没有域的信息,不知道该怎么样加入域的信息,我用了下面的代码:
xmlHttp.open('GET' , url , false , 'domainname\'+sUserName , sPassword );
结果连在我机器上访问都提示没有权限,看来不行
不知道怎么样加入域的信息,请指教:)
谢谢你的热心帮助,可能是我没有把问题说清楚,我现在整理一下思路:
-----------------------------------------------------------------
前提条件:
(a). 我写的是一个web part,也就是一个自定义控件,运行在一个网站上。
(b).当我们在访问一个基于windows验证的网页的时候,会弹出用户名和密码的提示,要求用户输入,现在我不想让用户输入用户名和密码,而是由这个控件中其他功能模块中记录的用户名和密码来模拟windows登录来访问这个网页。(c).为了实现这个目的,我采用了两种途径,只要有一种途径能成功就行,但是现在这两种途径都有点问题,这也是我有时谈论iframe,有时讨论xmlHttp的原因。
-----------------------------------------------------------------------
这两种途径分别是:
------------------------------------------------------------------------
*******************************************************
第一种方法.客户端用javascript函数来实现,下面是我写的一个javascript函数的一部分:
--------------------------------------------
<script language='javascript'>
<!--
function OpenWindowWithUserInfo(url)
{
var sUserName = getCookie('FGUserName');
var sPassword = getCookie('FGUserPassword');
var sDomain = getCookie('FGUserDomain');
if ( sUserName == null )
{
sUserName = '';
}
if ( sPassword == null )
{
sPassword = '';
}
if ( sDomain = null )
{
sDomain == '';
}
window.status='正在进行身份验证,可能需要几秒钟的时间,请耐心等待...'
if ( sUserName != '' )
{
var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');
xmlHttp.open('GET' , url , false , sUserName , sPassword );
xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );
xmlHttp.Send();
alert( sUserName );
alert( xmlHttp.status);
if( xmlHttp.status == '200' )
{
window.status=''
window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
location.reload();
}
}
window.status=''
}
//-->
</script>
-------------------------------------------------
这段javascript代码注册在客户端,然后调用这个函数,传入一个url,这个url就是基于windows验证的网页,注意下面这句话:
if( xmlHttp.status == '200' )
{
window.status=''
window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
location.reload();
} 也就是说,如果xmlHttp.status 等于 200的话,证明模拟windows登录成功,就直接打开这个网页,不用再另外回传html代码。
-----------------------------
这种方法在基于windows验证的网页所在的服务器上执行成功,打开的网页也具有了javascript代码中的用户身份。
但是在服务器以外的其他机器上就执行不成功,xmlHttp.status 的值是401(没有权限)
我试了MSXML2.XMLHTTP.4.0和MSXML2.XMLHTTP都不行,我也安装了微软的补丁http://support.microsoft.com/default.aspx?kbid=832414
但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问基于windows验证的网页。-----------------------------------
***********************************
第二种方法:在服务器端用用户名和密码模拟用户的身份去访问基于windows验证的网页,
经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
--------------------------------------
但是如何将html代码写入iframe是个问题,因为用document.write来写页面上会出现乱码(我在上面的帖子中已经给出了好几遍例子)
------------------------------------------------------------------
以上就是我的两种途径,任何一种好用都可以,还请多多指教:)
经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
---------------------------------
问:这段html代码存放在哪里?2.楼主说孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
----------------------------------
问:除了特殊符号和javascript代码,还有什么特殊的东西没?另回答楼主的一个问题:我用楼上的方法一次拼全没有报错,
在<iframe></iframe>中间也有一个网页的html代码,可是在客户端的网页上面iframe上面是空白,
为什么是空白的那?
如何才能让iframe中的网页显示出来?
还是这样将html代码放在iframe标志中间就是错误的
请指教
----------------------------------------------------------
答:用直接修改iframe.document内容的方法(不管是innerHTML还是write方法),只要让document中包含了<script>标签,iframe就显示为空白。而用src="某网址"的方法,iframe.document的内容就可以包含<script>标签。
楼主请回答我的两个问题,那么我觉得能解决楼主的问题。
经过测试发现可以得到这个网页的html代码,现在的问题是如何将这段html代码显示在网页上,
这段代码组成的页面需要具有独立网页的功能,能够提交,而且不能与父页面冲突,所以我想到了iframe,因为除此之外没有其他的控件具有这样的包容能力,即使用用户控件,也不能避免使用iframe
---------------------------------
问:这段html代码存放在哪里?-------------------------------------------------------
这段代码是通过服务器端获取的,在服务器端存在一个字符串中,这里有两种处理方法:
(1)直接在服务器端调用iframe.InnerHtml,但是显示为空白
(2)调用客户端的javascript脚本,打开一个空白页(about:blank),然后用document.write("html代码")写进去,但是由于html代码中有特殊符号和javascript代码,所以导致了页面的乱码,而不能正确地执行函数的功能,反而出现了javascript函数,具体的页面乱码我上面已经粘贴过好几次了****************************************************************************
2.楼主说孟子的方法是用javascript,用javascript来为一个iframe赋值就会出现乱码,因为html中有很多特殊符号和javascript代码,具体的乱码我已经在上面贴出来了
----------------------------------
问:除了特殊符号和javascript代码,还有什么特殊的东西没?-----------------------------------------
没有什么其他的东西了,其实就是一个网页的源代码请多多指教,谢谢
你的方法很好,可是我的问题还是不能解决,原因如下:
*************************************
1.生成HTML文件。如前所说,由于document.write()这类方法的固有缺陷,document的内容一旦包含<script>标签就会出现问题;但是,用src="某网址"就不会有问题。这样,楼主可以把保存的HTML代码字符串通过FileStream对象,生成HTML文件,然后把iframe的src指向这个文件。
---------------------------
可是在这个刚刚生成的html文件中必须带有用户登录信息,我该如何带有这个登录信息那?只有把这个网页设置成windows验证的。
但是如果设置成windows验证的,那么访问的时候就会弹出用户名和密码,而我做这个功能的初衷就是不让弹出用户名和密码提示,而由程序自己写入。如果生成的新html文件还是要弹出用户名和密码的话,那么好像又回到了起点。2.去除<script>段代码。还是如前所说,既然有这个标签会出现问题,那么就去掉这个标签以及其包含的所有内容。但是这些JS函数还是要执行的啊,该怎么执行呢?方法就是,把本应包含在iframe中的JS函数全部挪至父页面,也就是包含iframe的页面,而把iframe页面对这些函数的引用,全都加上"parent."这样的东东。这个方法显然比第一个方法复杂,主要是要用不少字符串函数。
-----------------------------------------
可是我要访问的网页不只在我的控件上面调用,还要在其他程序中调用,有时是需要单独打开这个网页的,如果用parent...来实现javascript功能,那么在单独打开这个网页的时候就会出错。*********************************************************************
我又想了一下,好像用html代码的方法确实有很多问题,因为我的服务器端还有很多需要处理的东西,单独一个静态页面好像不行,看来还是要想办法无验证的直接打开windows验证的网页(并且附带了登录信息),而不是用返回的html代码实现。看来还是要继续研究xmlHttp或者其他类似的方法
*******************************************************************
非常感谢你的回复,因为你让我认识到这种写html代码的方法是不可行的,也让我学到了很多东西。
*******************************************************************
看来现在只剩下一种方法了,如果你有时间还请指教以下,方法描述如下:◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆前提条件:
(a). 我写的是一个web part,也就是一个自定义控件,运行在一个网站上。
(b).当我们在访问一个基于windows验证的网页的时候,会弹出用户名和密码的提示,要求用户输入,现在我不想让用户输入用户名和密码,而是由这个控件中其他功能模块中记录的用户名和密码来模拟windows登录来访问这个网页。(c).为了实现这个目的,我考虑用xmlHttp的来实现。我定义了一个javascript函数
--------------------------------------------
<script language='javascript'>
<!--
function OpenWindowWithUserInfo(url)
{
var sUserName = getCookie('FGUserName');
var sPassword = getCookie('FGUserPassword');
var sDomain = getCookie('FGUserDomain');
if ( sUserName == null )
{
sUserName = '';
}
if ( sPassword == null )
{
sPassword = '';
}
if ( sDomain = null )
{
sDomain == '';
}
window.status='正在进行身份验证,可能需要几秒钟的时间,请耐心等待...'
if ( sUserName != '' )
{
var xmlHttp = new ActiveXObject('MSXML2.XMLHTTP.4.0');
xmlHttp.open('GET' , url , false , sUserName , sPassword );
xmlHttp.SetRequestHeader( 'Accept-Lauguage' , 'zh-cn' );
xmlHttp.Send();
alert( sUserName );
alert( xmlHttp.status);
if( xmlHttp.status == '200' )
{
window.status=''
window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
location.reload();
}
}
window.status=''
}
//-->
</script>
-------------------------------------------------
这段javascript代码注册在客户端,然后调用这个函数,传入一个url,这个url就是基于windows验证的网页,注意下面这句话:
if( xmlHttp.status == '200' )
{
window.status=''
window.showModalDialog(url,'','scroll:1;status:0;help:0;resizable:1;dialogWidth:800px;dialogHeight:600px');
location.reload();
} 也就是说,如果xmlHttp.status 等于 200的话,证明模拟windows登录成功,就直接打开这个网页,不用再另外回传html代码。
-----------------------------
这种方法在基于windows验证的网页所在的服务器上执行成功,打开的网页也具有了javascript代码中的用户身份。
但是在服务器以外的其他机器上就执行不成功,xmlHttp.status 的值是401(没有权限)
我试了MSXML2.XMLHTTP.4.0和MSXML2.XMLHTTP都不行,我也安装了微软的补丁http://support.microsoft.com/default.aspx?kbid=832414
但是我不知道该如何设置权限,才能让其他机器上的用户用域用户登录可以用xmlHttp访问基于windows验证的网页。
xmlHttp.open('GET' , url , false , sUserName , sPassword );
里面没有域的信息,不知道该怎么样加入域的信息,我用了下面的代码:
xmlHttp.open('GET' , url , false , 'domainname\'+sUserName , sPassword );
结果连在我机器上访问都提示没有权限,看来不行
不知道怎么样加入域的信息,请指教:)-------------------------
请各位多多指教,谢谢
************************************************************1.可是在这个刚刚生成的html文件中必须带有用户登录信息,我该如何带有这个登录信息那?只有把这个网页设置成windows验证的。
但是如果设置成windows验证的,那么访问的时候就会弹出用户名和密码,而我做这个功能的初衷就是不让弹出用户名和密码提示,而由程序自己写入。如果生成的新html文件还是要弹出用户名和密码的话,那么好像又回到了起点。
----------------------------------------------
楼主说必须带有用户登录信息,请问这登录信息是什么?
为何必须设置成windows验证的?一个普通的HTML静态文件需要什么验证么?2.可是我要访问的网页不只在我的控件上面调用,还要在其他程序中调用,有时是需要单独打开这个网页的,如果用parent...来实现javascript功能,那么在单独打开这个网页的时候就会出错。
----------------------------------------------
其它程序中调用就相应的改写啊,比如单独打开,那就不要"parent."啊,还是对你的“respstr”这个变量进行字符串处理啊。而且,看了你帖出的代码,那段HTML代码中,也就两个很简单的JS函数啊。
--------------------------------
因为这个网页是用在一个流程中的,所以必须要附带当前操作人的信息进去,因为我们用的工作流是和活动目录结合在一起的,所以要用windows验证现在我已经发现,只有一个html静态页面会有很多问题,比如一些服务器端验证根本能进行,还有一些服务器操作也不能进行所以只好放弃这种方法,去研究xmlHttp了,看来还是要访问原始网页才可以
看了很多,楼主的想法大致清楚了。我提如下建议,请尝试。
第一:先获取当前用户的登陆令牌。你应该会吧:)
第二:提取HTML代码。1.<Script/>中的代码,不包含<Scrpit>标记。2.<body/>间所有纯HTML代码。
第三:使用RegisterClientScriptBlock或RegisterStartupScript方法注册所提取的JS代码。
第四:将纯HTML代码写入IFREAM
第五:如果提示用户名和密码,就在Page_Load中先申请用户认证。