Javascript在Safari中运行,但不适用于Chrome或Firefox

时间:2012-06-12 22:47:24

标签: javascript firefox google-chrome javascript-events

我根本不是程序员,所以我很抱歉,但在搜索网页后我找不到答案。

我正在尝试从this website进行广告资源搜索,并将其置于Facebook标签中。我从网站上抓取代码并在TextEdit中删除了我不想要的页眉和页脚。我只是试图获取库存搜索部分。

当我在Safari中测试它似乎工作。库存搜索出现了,所有的按钮和过滤器都运行得很好,当我去另一个页面时,页眉和页脚仍然消失,只有库存搜索在那里 - 完美。

但是,在Chrome和Firefox中进行测试后,按钮和过滤器根本无法使用,您无法浏览第一页或应用过滤器。

所以我决定去网站(库存搜索的第一页,如上面的链接)并将源代码保存到我的桌面,看看我在Chrome或Firefox中打开它是否可行,以及它没有,没有按钮或过滤器工作,卡在第一页。但它确实在Safari中有效。

这是什么意思?我现在应该放弃吗?我会包含代码但它是我见过的最长的代码。我通过TextEdit完成的所有代码测试。

修改
以下是Chrome中的错误:

未捕获的SyntaxError:意外的令牌< Chevy.html:4608 XMLHttpRequest无法加载http://www.erikschevrolet.com/searchVehicles.ajax。 Access-Control-Allow-Origin不允许使用null 未捕获错误:XmlRenderEngine =>未知错误bundle.js:1 XMLHttpRequest无法加载http://www.erikschevrolet.com/searchVehicles.ajax。 Access-Control-Allow-Origin不允许使用null 未捕获错误:XmlRenderEngine =>未知错误bundle.js:1 XMLHttpRequest无法加载http://www.erikschevrolet.com/searchVehicles.ajax。 Access-Control-Allow-Origin不允许使用null 未捕获错误:XmlRenderEngine =>未知错误bundle.js:1

2 个答案:

答案 0 :(得分:1)

这些Chrome警告与此无关。上面给出的错误是关于跨源问题。由于从Javascript中访问远程资源的真正邪恶的事情可能导致现代浏览器阻止它们,除非明确允许。

例如,http://example.com域下的javascript无法访问http://example.net中的大多数内容。由于您下载了大多数文件并且您尝试在本地运行它们,但其中一些文件仍然引用http://www.erikschevrolet.com域下的文件,因此不允许这样做。

AFAIK没有一种非常简单的方法来避免这个问题;最安全的解决方案是让您下载所有使用过的文件,并手动更改对http://www.erikschevrolet.com的引用,并引用您的本地路径。或者,可以将XMLHttpRequest的withCredentials值设置为true(但是因为你不是程序员,你可以把它弄得一团糟......)就像这样(来自http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/的例子):

var request = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/';
function callOtherDomain(){
  if(request)
  {
   request.open('GET', url, true);
   request.withCredentials = "true";
   request.onreadystatechange = handler;
   request.send();
  }
}

即使这可能也不会得到预期的结果,因为很多这些文件可能是在服务器上动态生成的,并且可能会发生变化。

答案 1 :(得分:0)

在使用特定加载文件方案在javascript中读取xml或文本文件时,您似乎遇到了问题。它发生在http请求工作的浏览器中,在这种情况下,您可以尝试使用javascript工作,

if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
else
  {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

这将对chrome safari firefox采取行动并试试这个。