如何在JavaScript中获取.js脚本的源代码?
我试过运行上面的代码和它的变体-删除mimetype、缓存,将dataType设置为“scripttext”和“scripttext” 直接从jQuery文档: 多个空格分隔的值:按 在jQuery1.5中,jQuery可以转换 从中接收的数据类型 内容类型标题到您想要的内容 要求例如,如果你想要一个 要作为XML处理的文本响应, 对数据类型使用“文本xml”。你 也可以提出JSONP请求,就这样吧 作为文本接收,并由 jQuery作为XML:“jsonp文本XML。” 类似地,一个速记字符串,如 “jsonp xml”将首先尝试 将jsonp转换为xml, 否则,请将jsonp转换为 文本,然后从文本转换为xml 我仅限于发出类型为“script”的数据类型请求,否则我会得到一个“…不允许由访问控制允许来源”错误。但无论如何,我不应该在jQuery中自由地解释它吗?我已经明确地要求它作为文本,但是不管我做什么,从服务器返回的数据msg总是“未定义” 有没有什么解决办法,黑客还是没有 编辑:此代码的工作原理是加载JavaScript文件并将其下载到用户的浏览器中。但我还是看不见 但无论如何,我不应该在jQuery中自由地解释它吗如何在JavaScript中获取.js脚本的源代码?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试过运行上面的代码和它的变体-删除mimetype、缓存,将dataType设置为“scripttext”和“scripttext” 直接从jQuery文档: 多个空格分隔的值:按 在jQuery1.5中,jQuery可以转换 从中接收的数据类型 内容类型标题到您想要的内容 要求例如,如果你想要一个 要作为XML处理的文本响应, 对数据类型使用“文本xml”。你 也可以提出JSONP请求,就这样吧 作为文本接收,并由 jQuery作为XML:“jsonp文本XML。” 类似地,一个速记字符串,
浏览器中的安全机制阻止您这样做,因为它允许您从其他网站窃取用户的私人信息。如果您向脚本所在的同一域发出请求,它将起作用。否则,您无法使用JavaScript发出请求,而需要从服务器发出请求。请注意,我正在使用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});
我理解如果不允许我请求JSON对象或类似的东西,因为它可能包含敏感数据。但这是一个脚本!如果允许我执行代码并运行其中的函数,为什么我不能查看源代码?内容类型被认为不够可靠,不能用于安全目的。在很多情况下,服务器使用了错误的服务器(或者可能被欺骗)。啊,我明白了。我刚刚测试了一些代码,似乎您可以发出请求(并已接受/返回)任何内容,只要您将预期数据类型声明为“script”类型(例如try),浏览器仍将尝试“执行”此代码,但这将导致语法错误。
$.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): }