ホームページ  >  記事  >  ウェブフロントエンド  >  AJAX_javascript スキルのクロスドメイン アクセスにおける「権限がありません」エラーを解決する

AJAX_javascript スキルのクロスドメイン アクセスにおける「権限がありません」エラーを解決する

WBOY
WBOYオリジナル
2016-05-16 19:01:391309ブラウズ

同じドメイン以外の Web サイトへのアクセスは禁止されています。 http://www.google.cn、




に直接アクセスする例です。このコードを test.html に保存します。ローカルで IE で開くのは問題ありませんが、コードをサーバーにアップロードした後、問題が発生します。JS で「権限がありません」というエラーが表示されます。これを解決するにはどうすればよいですか?
以下で考えてみましょう。同じドメイン以外のアドレスにはアクセスできないため、同じドメイン内のアドレスにのみアクセスできます。同じドメイン以外の Web ページのコンテンツを動的ファイルから取得するにはどうすればよいでしょうか。同じドメインですか?私たちは依然として AJAX について考えていますが、この AJAX はサーバー側で実行されます。
一般的な考え方は次のとおりです。まず、AJAX を使用して自分のサイト内のファイルに URL (getPage.asp など) を送信します --- それを再度渡します。 in getPage.asp サーバー XMLHTTP は送信された URL にアクセスします -- 取得したコンテンツを URL が送信されたページに返します -- コンテンツを表示します
test.html ファイルから始めてコードを整理しましょう




次に、getpage.asp ファイルがあります (注: 文字化けを防ぐために、このファイルは UTF-8 形式で保存する必要があります)。

response.charset=" UTF-8"
reg="
/]*). /{0,1}>"
'関数名: GetResStr
'関数: 指定された URL の HTML コードを取得します
' パラメーター: URL - 取得する URL
function GetResStr(URL)
err.clear
dim ResBody,ResStr,PageCode,ReturnStr
Set Http=createobject("MiCROSOFT.XMLHTTP")
Http.open "GET",URL,False
Http.Send()
If Http.Readystate =4 then
If Http.status= 200 次に、
ResStr=http.responseText
ResBody =http.responseBody
PageCode=GetCode(ResStr,reg)
ReturnStr=BytesToBstr(http.responseBody,PageCode)
GetResStr=ReturnStr
End If
End If
End Function

'関数名: BytesToBstr
'関数: バイナリデータを文字に変換
'パラメータ: Body-binary data、Cset-text エンコーディングMethod
Function BytesToBstr(Body,Cset)
Dim Objstream
Set Objstream = CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream .Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset =Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function

'関数名: GetCode
'機能: バイナリを文字に変換
'パラメータ: クエリする str-string、regstr-正規表現
関数 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)
serStr=Cols(0).SubMatches(0) '最初に一致した項目を使用します
else 'それ以外の場合は、デフォルト値 gb2312 を指定します。これは少し経済的な Lazy メソッドです。ページにエンコード形式が指定されていない場合、
serStr="gb2312"
end if
GetCode=serStr を知るのは非常に面倒です。
end function

dim url:url =request.querystring("url")
response.write GetResStr(URL)
%>

コードが整理されています。実験後、http://www.google.cn のコンテンツが正常に抽出されました。!!!これにより、「アクセス許可がない」問題が解決されました。
実際には単純なgetpage.aspは取得できますが、jsのようにDOMを動的に処理することはできません。 最初の方法を使用して http://www.baidu.com にアクセスすると、文字化けが発生します。これは、baidu エンコードが GB2312 で、XMLHTTP が UTF-8 エンコード形式を返すためです。 2 番目の方法を使用すると、エンコード形式を定義するサイトが正常に情報を返すことができる限り、このような問題は発生しません (一部の特殊なエンコードを使用するサイトは除きます)。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。