javascript - 规避本地文件系统上的 Chrome Access-control-allow-origin?

标签 javascript jquery google-chrome same-origin-policy

我已经阅读了有关 SO 的其他同源策略主题,但我还没有看到任何与本地文件系统相关的解决方案。

我有一个必须在本地提供服务的网络应用程序(从广义上讲)。我试图在用户加载页面后加载大量数据,具体取决于他们在网页上执行的操作。在 Firefox 3.5 和 IE8 中,我可以使用 jQuery 的 AJAX() 和 GetScript() 方法来执行此操作,但在 Chrome 中,由于同源策略,此操作失败。

XMLHttpRequest cannot load file://test/testdir/test.js. Origin null is not allowed by Access-Control-Allow-Origin.

当我做一些简单的事情时就会发生这种情况

$.getScript("test.js");

这在 IE 和 Firefox 中运行得非常好。

读了很多相关内容后,我决定尝试直接写入文档的头部。在 Chrome 的控制台中,我输入了以下内容:

var head = document.getElementsByTagName("head")[0];  
var script =document.createElement('script');   
script.id = 'uploadScript';  
script.type = 'text/javascript';  
script.src = "upload.js";   
head.appendChild(script);

粘贴到控制台时效果很好 - <script...test.js</script>元素被添加到头部,进行评估,并将内容加载到 DOM 中。

我认为这是成功的,直到我将此代码放入函数调用中。当从函数调用时,相同的代码会将元素添加到但不评估 JavaScript 文件。我不明白为什么。如果我使用 Chrome 的控制台在将元素添加到的方法中停止执行并运行上面的代码,它不会评估它。但是,如果我取消暂停执行并运行完全相同的代码(将其粘贴到控制台窗口中),它就会起作用。我无法解释这一点。以前有人处理过这个问题吗?

我已阅读以下 SO 帖子,但它们没有描述我遇到的问题:

Ways to circumvent the same-origin policy
XMLHttpRequest Origin null is not allowed Access-Control-Allow-Origin for file:/// to file:/// (Serverless)
Cross-site XMLHttpRequest

同样,我的最后一招是在网页加载时加载所有数据 - 这可能会导致加载网页时出现长达 10 秒的延迟,而这对于 90% 的应用用户来说是不必要的。

感谢您的任何建议/替代方案!!!

最佳答案

认为我已经弄清楚了。

我真正需要做的就是将回调添加到我的 <script> 中标签。最终代码:

我有一个名为 next 的元素...所以,在 $("#next").click() 中函数我有以下代码。仅当他们单击“下一步”时才会执行。

//remove old dynamically written script tag-    
       var old = document.getElementById('uploadScript');  
   if (old != null) {  
     old.parentNode.removeChild(old);  
     delete old;  
   } 

   var head = document.getElementsByTagName("head")[0];  
   script = document.createElement('script');  
   script.id = 'uploadScript';  
   script.type = 'text/javascript';  
   script.src = 'test/' + scope_dir + '/js/list.js';  
   script.onload = refresh_page;    
   head.appendChild(script);  


function refresh_page(){  
   //perform action with data loaded from the .js file.  
}  

这似乎有效,并且允许 Chrome 在本地文件系统上动态加载 .js 文件,同时规避我在尝试使用 jQuery 函数时遇到的 access-control-allow-origin 策略。

关于javascript - 规避本地文件系统上的 Chrome Access-control-allow-origin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4742467/

相关文章:

javascript - 如何从对象中深度移除空值、空对象和空数组

javascript - 在 ASP.NET 服务器上缩小 CSS 和 JavaScript 的最佳方法是什么?

javascript - 编写此函数以删除表中的行/对象的更快方法是什么?

javascript - 为什么在使用 jQuery 时将这些奇怪的字符插入到 Facebook iframe 中? €‹

html - Google Chrome 仍然支持 HTML 导入吗?

javascript - Serial API 中 navigator.serial 和 SerialPort 的功能是否未实现?

javascript - 使用 lodash 搜索并删除集合中数组中的空值

javascript - 页面淡入和淡出过渡

javascript - 在 Google Chrome 中捕获下载

google-chrome - 如何在 Chrome 中保存 websocket 帧