《js提示没有权限.docx》由会员分享,可在线阅读,更多相关《js提示没有权限.docx(6页珍藏版)》请在三一办公上搜索。
1、js提示没有权限js提示没有权限 很多人在使用AJAX调用别人站点内容的时候,JS会提示没有权限错误,这是XMLHTTP组件的限制-安全起见 禁止访问非同域的网站,下面一个例子来访问,: w2 + k3 g u7 + q 6 O5 h% ?5 d- I0 Q8 i function createobj ! y7 n6 q+ S/ o: M# Q: if (window.ActiveXObject) / D+ + a/ u L- W/ d z return new ActiveXObject(Microsoft.XMLHTTP);% d- S T I0 Q7 i! R R& F* i; A .b
2、: D0 E1 L r7 V$ else if (window.XMLHttpRequest) * V6 z9 m& 1 f) 8 v$ R& A& t7 f return new XMLHttpRequest;5 s4 n. b1 L! v0 s! V$ z & e- $ Z5 f% D0 function getWebPage(url) varoBao=createobj; varmy_url=url W$ a5 a6 y 1 I/ G+ s8 t0 O* r% C oBao.open(get,my_url,false); $ m& c9 ?5 V, e5 W. ! B oBao.onre
3、adystatechange=function, B ) Y0 w# B2 N+ a1 d/ p O* c& t if(oBao.readyState=4) if(oBao.status=200)$ + x1 c W m. 5 * A1 s! e varreturnStr=oBao.responseText; document.write(returnStr); else2 C5 i/ U* T, O+ o4 j/ I6 E3 q document.write(未找到您输入的地址或服务器505错误!); 5 Y6 Q5 K4 c+ c1 B f oBao.send(null); , 5 k:
4、m- B8 D getWebPage(); f% J$ H3 w+ V y! i 保存这段代码到test.html,在本地直接用IE打开没问题,但将该段代码上传到服务器后,问题出现了-JS提示没有权限错误!这该如何解决呢? 下面思考一下:既然不能访问非同域的,只能访问同域的地址了,同域的动态文件怎么获取非同域网页内容呢?我们还是想到的AJAX,只不过这个AJAX是在服务器端执行. m3 q+ |: y2 _6 D R* M 大体思路是这样的:首先将URL用AJAX提交给自己站内的文件,例如getPage.asp-在getPage.asp再次通过服务器XMLHTTP来访问提交来的URL-将获取的
5、内容返回给提交URL的页-显示内容 下面开始组织代码,首先是test.html文件 d# q$ A! _7 _% w4 % $ P! J function createobj ; u8 6 B2 7 s. I, y if (window.ActiveXObject) return new ActiveXObject(Microsoft.XMLHTTP);( m f& l. $ b, H7 Y/ M( N# i( V else if (window.XMLHttpRequest) + S9 W0 L, v4 M% r7 e return new XMLHttpRequest; + q; N8 p
6、9 R0 |2 b# $ v. H2 G9 L, x& n: p function getWebPage(url) ! m- v0 Z# V, R/ i6 i2 A varoBao=createobj; varmy_url=getpage.asp?url=+escape(url);+ c, 1 Z: o2 Q3 I# oBao.open(get,my_url,false); + U6 O% I( O$ E2 Y6 . oBao.onreadystatechange=function$ b3 D# j6 B3 U! A) j9 v, 3 if(oBao.readyState=4)/ R5 j,
7、c& K8 f if(oBao.status=200)6 - h. C/ r) V/ s! R varreturnStr=oBao.responseText; document.write(returnStr);, r9 L+ y# F3 & else2 S3 R$ 7 r2 G( Z document.write(未找到您输入的地址或服务器505错误!);9 q, d( * Q* Z# / i ; F f* F/ + b( Z5 p* h; * U! u + M, e* n) N: S4 9 e2 _ 7 p8 q7 d- i$ a4 u7 l oBao.send(null); & k1 0
8、 D. c$ N1 l0 2 q 3 |2 h/ K8 U6 J m0 B$ e1 K. M getWebPage(); * X; n! v7 e+ z% T& n u L* Q; t 再就是getpage.asp文件(注意:要以UTF-8格式保存本文件,防止乱码),如下: * m1 S7 A7 x* h) t % m# S3 , , r- F response.charset=UTF-8 L8 f$ P4 J, A | reg=/*).+/0,1 函数名:GetResStr) i$ t0 r% e3 4 G5 k 作用:获取指定URL的HTML代码 参数:URL-要获取的URL5 y E$
9、9 U! v+ T; / t function GetResStr(URL) err.clear) l3 Q! H; f1 M1 U l4 P dim ResBody,ResStr,PageCode,ReturnStr& 4 O, u0 z$ | Set Http=createobject(MiCROSOFT.XMLHTTP) 8 z4 % w: R# g/ _ Http.open GET,URL,False Http.Send B3 ?- Q2 d+ Y If Http.Readystate =4 Then If Http.status=200 Then1 K) j& 1 r3 V Y+ 1
10、 l! | ResStr=http.responseText4 H9 v c3 M/ p, d. E% l9 ResBody=http.responseBody8 p! D- 8 t t, M( d. d& h PageCode=GetCode(ResStr,reg) ReturnStr=BytesToBstr(http.responseBody,PageCode) GetResStr=ReturnStr. x7 5 I% P; T2 q& t& d# End If End If & d9 c M& 8 B! V* w2 _ L8 _, r End Function 函数名:BytesToBs
11、tr 作用:转换二进制数据为字符) w+ J+ 8 C2 s/ m) * o 参数:Body-二进制数据,Cset-文本编码方式 Function BytesToBstr(Body,Cset) Dim Objstream Set Objstream = CreateObject(adodb.stream) - y& c & a H1 h objstream.Type = 1 7 u; t. U2 m! n$ 6 n9 k objstream.Mode =3 objstream.Open objstream.Write body 1 a0 4 u/ H: + k objstream.Positi
12、on = 0 objstream.Type = 2 objstream.Charset =Cset 5 m X6 F, U2 I% k9 X* O4 V BytesToBstr = objstream.ReadText 5 V0 8 N 6 B. F+ H0 H( % H; f objstream.Close $ s# B, D$ g1 k ! U set objstream = nothing & V! J+ N1 3 ( R. a L$ End Function5 v2 J6 i5 T H, C, n! u, h% O 函数名:GetCode 作用:转换二进制为字符. ?6 N# A: Y
13、1 Z T, e 参数:str-待查询字符串,regstr-正则表达式 Function GetCode(str,regstr) Dim Reg,serStr set Reg= new RegExp Reg.IgnoreCase = True Reg.MultiLine = True Reg.Pattern =regstr if Reg.test(str) then 若查询到匹配项 Set Cols = Reg.Execute(str); Z7 5 Y, b/ 1 i9 k _$ A3 r serStr=Cols(0).SubMatches(0) 使用匹配到的第一个匹配项 else 否则给个默
14、认值gb2312,有点省懒法,如果页面没给出编码格式,想知道确实有点麻烦# q+ $ w8 w2 J& B( & H serStr=gb23127 m2 X4 z+ p# s; o4 R* C) D end if GetCode=serStr end function8 f& # L* |4 # - T- X6 i1 q. O, q p dim url:url=request.querystring(url), c 1 M6 E ?7 & T response.writeGetResStr(URL) m h0 z0 Z9 c+ U %! v h3 N ( c& _ 3 g( X; 6 + _9 v 代码组织完毕,实验下,成功提取的内容!这样就可以解决没有权限的问题了。 1 : l6 s* N7 ( J5 M O/ I 其实,单纯一个getpage.asp一样能获取,不过不能像js那样动态的处理DOM。