2011-06-10 55 views
0
$.ajax({url: 'http://gmaps-samples-v3.googlecode.com/svn-history/r16/trunk/xmlparsing/util.js', dataType: 'script text text', crossdomain:'true', success: function(msg, status, obj){console.log(msg);console.log(status);console.log(obj)}, mimetype: 'text/plain', cache:false}); 

我試着運行上面的代碼和它的變體 - 刪除mimetype,緩存,將dataType設置爲'腳本文本'和'腳本腳本文本'。如何在JavaScript中獲取.js腳本的源代碼?

直接從jQuery的文檔:

多個,空間分隔值:在jQuery 1.5 ,jQuery的可以在 的dataType從它在 Content-Type頭收到你 轉換要求。例如,如果要將 文本響應視爲XML,則 將對「dataType」使用「text xml」。您還可以創建JSONP請求,將 作爲文本接收,並將其解釋爲 jQuery作爲XML:「jsonp text xml」。 同樣,速記字符串,如 「JSONP XML」將首先嚐試 從JSONP轉換爲XML,並且, 做不到這一點,從JSONP轉換爲 文本,然後從文本到XML

我僅限於輸入'script'類型的dataType請求,否則我會得到「... Access-Control-Allow-Origin不允許的」錯誤。但是,通過所有權利,我不應該自由地在jQuery中解釋它,但我想嗎?我已經明確要求將它作爲文本,但msg(從服務器返回的數據)總是「未定義」,無論我做什麼。

是否有任何解決方法,這個,哈克或不?

編輯:此代碼工程因爲它加載JavaScript文件並將其下載到用戶的瀏覽器。但我仍然無法查看它!

回答

2

但是,通過所有權利,我不應該自由解釋它在jQuery中,但我想?

瀏覽器中的安全機制阻止您這樣做,因爲它會允許您從其他網站竊取用戶的私人信息。如果您將請求發送到您的腳本所在的同一個域,它將起作用。否則,你不能在JavaScript中發出請求,而需要從服務器上取而代之。

+0

我明白,如果我m不允許請求JSON對象或類似的東西,因爲它可能包含敏感數據。 但這是一個腳本!如果允許我執行代碼並運行其中的函數,爲什麼我無法查看源代碼? – 2011-06-10 04:42:08

+0

內容類型被認爲不足以用於安全目的。在很多情況下,服務器使用錯誤的服務器(或者可能會這樣做)。 – 2011-06-10 04:48:19

+0

啊,我明白了。 我剛剛測試了一些代碼,並且似乎您可以提出請求(並已接受/返回)**任何**,只要您聲明預期的數據類型爲'script'類型即可(例如,嘗試http:// google.com)瀏覽器仍會嘗試「執行」此代碼,但會導致SyntaxError。 – 2011-06-10 04:56:47

0

請注意,我在jQuery Mobile 1.0a4.1和PhoneGap中使用了jQuery 1.6.1。

你的,數據類型應該是「文本」,而不是「腳本文本文本」:

$.ajax({url: 'http://gmaps-samples-v3.googlecode.com/svn-history/r16/trunk/xmlparsing/util.js', dataType: 'text', crossdomain:'true', success: function(msg, status, obj){console.log(msg);console.log(status);console.log(obj)}, mimetype: 'text/plain', cache:false}); 

此命令工作得很好,回到我在日誌中的以下內容:

D/PhoneGapLog( 240): file:///android_asset/www/js/myJSFile.js: Line 1 :/
** 
D/PhoneGapLog( 240): * Returns an XMLHttp instance to use for asynchronous 
D/PhoneGapLog( 240): * downloading. This method will never throw an exception, 
but will 
D/PhoneGapLog( 240): * return NULL if the browser does not support XmlHttp for 
any reason. 
D/PhoneGapLog( 240): * @return {XMLHttpRequest|Null} 
D/PhoneGapLog( 240): */ 
D/PhoneGapLog( 240): function createXmlHttpRequest() { 
D/PhoneGapLog( 240): try { 
D/PhoneGapLog( 240): if (typeof ActiveXObject != 'undefined') { 
D/PhoneGapLog( 240):  return new ActiveXObject('Microsoft.XMLHTTP'); 
D/PhoneGapLog( 240): } else if (window["XMLHttpRequest"]) { 
D/PhoneGapLog( 240):  return new XMLHttpRequest(); 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): } catch (e) { 
D/PhoneGapLog( 240): changeStatus(e); 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): return null; 
D/PhoneGapLog( 240): }; 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): /** 
D/PhoneGapLog( 240): * This functions wraps XMLHttpRequest open/send function. 
D/PhoneGapLog( 240): * It lets you specify a URL and will call the callback if 
D/PhoneGapLog( 240): * it gets a status code of 200. 
D/PhoneGapLog( 240): * @param {String} url The URL to retrieve 
D/PhoneGapLog( 240): * @param {Function} callback The function to call once ret 
rieved. 
D/PhoneGapLog( 240): */ 
D/PhoneGapLog( 240): function downloadUrl(url, callback) { 
D/PhoneGapLog( 240): var status = -1; 
D/PhoneGapLog( 240): var request = createXmlHttpRequest(); 
D/PhoneGapLog( 240): if (!request) { 
D/PhoneGapLog( 240): return false; 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): request.onreadystatechange = function() { 
D/PhoneGapLog( 240): if (request.readyState == 4) { 
D/PhoneGapLog( 240):  try { 
D/PhoneGapLog( 240):  status = request.status; 
D/PhoneGapLog( 240):  } catch (e) { 
D/PhoneGapLog( 240):  // Usually indicates request timed out in FF. 
D/PhoneGapLog( 240):  } 
D/PhoneGapLog( 240):  if (status == 200) { 
D/PhoneGapLog( 240):  callback(request.responseXML, request.status); 
D/PhoneGapLog( 240):  request.onreadystatechange = function() {}; 
D/PhoneGapLog( 240):  } 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): request.open('GET', url, true); 
D/PhoneGapLog( 240): try { 
D/PhoneGapLog( 240): request.send(null); 
D/PhoneGapLog( 240): } catch (e) { 
D/PhoneGapLog( 240): changeStatus(e); 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): }; 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): /** 
D/PhoneGapLog( 240): * Parses the given XML string and returns the parsed docu 
ment in a 
D/PhoneGapLog( 240): * DOM data structure. This function will return an empty 
DOM node if 
D/PhoneGapLog( 240): * XML parsing is not supported in this browser. 
D/PhoneGapLog( 240): * @param {string} str XML string. 
D/PhoneGapLog( 240): * @return {Element|Document} DOM. 
D/PhoneGapLog( 240): */ 
D/PhoneGapLog( 240): function xmlParse(str) { 
D/PhoneGapLog( 240): if (typeof ActiveXObject != 'undefined' && typeof GetObj 
ect != 'undefined') { 
D/PhoneGapLog( 240):  var doc = new ActiveXObject('Microsoft.XMLDOM'); 
D/PhoneGapLog( 240):  doc.loadXML(str); 
D/PhoneGapLog( 240):  return doc; 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): if (typeof DOMParser != 'undefined') { 
D/PhoneGapLog( 240):  return (new DOMParser()).parseFromString(str, 'text/xm 
l'); 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): return createElement('div', null); 
D/PhoneGapLog( 240): } 
D/PhoneGapLog( 240): 
D/PhoneGapLog( 240): /** 
D/PhoneGapLog( 240): * Appends a JavaScript file to the page. 
D/PhoneGapLog( 240): * @param {string} url 
D/PhoneGapLog( 240): */ 
D/PhoneGapLog( 240): function downloadScript(url) { 
D/PhoneGapLog( 240): var script = document.createElement('script'); 
D/PhoneGapLog( 240): script.src = url; 
D/PhoneGapLog( 240): document.body.appendChild(script); 
D/PhoneGapLog( 240): } 
相關問題