2011-01-27 20 views
4

私のウェブサイトはIEで失敗します。私はMacにしかアクセスできないので、テストするのは難しいし、パラレルはmehだ。私はあなたがYouTubeを検索するときにそれが失敗することを知っているので、私は1〜2回チェックすることができました。IEでこれがなぜ失敗するのですか?

は、ポップアップを閉じ、> 2010ヒット> 10/20ヒット>私の魂をヒット>エラー

http://www.phishvid.com/

は、誰もがいくつかの洞察を提供してもらえますか?失敗したコードは次のとおりです。

ありがとう!

+1

どのバージョンのようになりますか? JSを含むものは、多くの場合IE <= 7または<= 6の理由でMSの標準の解釈の異なるバージョンのために失敗する – tobyodavies

+0

私はそれらのすべてを信じています。私は本当にそれをうまくテストすることができません。本当に素早くチェックできると思いますか?ありがとう。 – switz

+2

これはクロスサイトスクリプティングの問題で、IEはおそらくajax/jsonリクエストをブロックしています。これをチェックしてください:http://stackoverflow.com/questions/3038862/jquery-getjson-not-working-cross-site/3038886#3038886 – Craig

答えて

4

Same Origin Policyによって制限されている別のドメインにAJAXリクエストを作成しようとしています。

JSONPをご利用になる場合は、ご希望のURLにJSONP callback=?をご利用ください。これにより、クロスドメインバリアを克服するのに役立ちます。

あなたは、更新されたURLは、IEの

$.getJSON("http://gdata.youtube.com/feeds/api/videos?callback=?&max-results=5&alt=json&q=phish " + song + " " + month2 + " " + day + " " + year, function (data) { 
    //your callback code 
} 

Example

+0

これについてのより多くのヘルプのためのhttp://stackoverflow.com/questions/4212105/how-to-get-and-display-the-list-of-youtube-videos-using-javascript –

+0

これは動作するようです!私はこれを試みたと思ったが、私はそうは思わない。ありがとう! – switz

0

私のIEは、ライン138上のjqueryの-1.4.4.min.js、あなたのサイトに次のようになりCHAR 355に「アクセスが拒否されました」報告:

if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type", 
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& 
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| 
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w} 

実際の文字番号355があります最初のbだから、jQuery 1.4.4のバグに出会ったかもしれないと思いますか? (1.4.4の特定の機能を使用していない限り)以前のバージョンを使用するか、.min.jsファイルを完全なjqueryファイルに置き換えるか、デバッガ文をこの場所のjquery-fileに挿入してください例外がスローされます)、何が間違っているかを把握するためにデバッグを試みます。たとえば、Microsoft Visual Web Developerを使用してデバッグすることができます。IE9で同じ問題が発生した場合は、.jsデバッガも組み込まれています。

EDIT:投稿したjQueryコード全体を確認した後、問題は、この場合jQueryがJSONPではなく、標準のAjax呼び出しを試行していることです。 (標準のajaxは、javascriptを提供していたサーバーにのみ許可されています)

+0

ここで確認できますか? http://phishvid.com/index2.htmlこれは開発版です。 – switz

+0

"xhr.open"(jquery.jsの行5910)という行は、jQueryが同じ発信元ポリシーで許可されていない標準のajax呼び出し(jsonpではなく)を実行していることを示しています。あなたが行うことができることは、Webサービスやページなどの自分のサーバー上の何かをAjaxコールで呼び出すことです。サーバがhttpリクエストを実行してYouTubeからの情報を取得してから、クライアントに返信します。 – AndreasKnudsen

関連する問題