当前位置: 首页 > 面试题库 >

本地AJAX呼叫远程站点可在Safari中使用,但不能在其他浏览器中使用

漆雕彬彬
2023-03-14
问题内容

我正在维护一个使用Javascript的网站。该脚本使用jQuery并从通常托管该站点的服务器中加载一些内容。

为了方便维护网站,我在iMac上运行了网站的本地副本。当我使用Safari时,这工作得很好。但是Firefox,Opera和Chrome拒绝运行。我想这是因为跨域策略。(我无法使用IE对此进行测试,因为IE必须在我的iMac上的虚拟机中运行,因此由于这个原因,无法访问任何本地文件)

在Firefox和其他浏览器中是否存在设置,我可以告诉浏览器可以使用本地javascript从本地html页面以ajax加载位于远程服务器上的文件?

简而言之:这是我的html页:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>some title</title>
        <link rel="stylesheet" type="text/css" href="../css/stylesheet.css">
        <script src="../js/jquery-2.1.3.min.js"></script>
        <script src="../js/myScript.js"></script>
    </head>
    <body>
        <!-- some content with a div-container to receive the ajax-content -->
    </body>
</html>

这是myScript.js:

var errorMsg = function (msg) {
    //insert the message into the html-page
};

var JSONerror = function (jqXHR, textStatus, errorThrown ) {
    var msg = 'JSON-answer: '+jqXHR.responseText;
    msg += '<br>'+'JSON-Errorstatus: '+textStatus;
    if ($.type(errorThrown) === 'string') {
        msg += '<br>'+'Error: '+errorThrown;
    }
    errorMsg(msg);
};

var JSONreceive = function (JSONobj, StatusString, jqXHR) {
    //insert the data in JSONobj into the html-page
}

var StartAJAX = function () {
    $.ajax({
        url: 'http://my.domain.tld/cgi-bin/myPerlScript.pl',
        data: "lastID=" + lastID
           + '&qkz=' + Math.random(),
           dataType: "json",
           success: JSONreceive,
           error: JSONerror
    });
};

还有一个事件侦听器,它侦听页面滚动和调整大小并检查其他一些约束(例如:是否已经在进行ajax调用?)。此侦听器呼叫StartAJAX

当它StartAJAX在Safari中调用我的页面(文件:/// User /
…)的本地副本时,我将Ajax内容完美地插入到html文档中。在其他浏览器中,我将错误消息插入html页面。它是:

JSON回答:未定义
JSON错误状态:错误
错误:

为什么它可以在Safari中工作,但不能在Firefox,Chrome和Opera中工作?

如何使这些浏览器正常工作?

(我需要在所有浏览器上对其进行测试,因为所有浏览器均以不同的方式呈现相同的html文件,但是我不想在每次更改后都将所有文件上载到服务器只是为了对其进行测试。)

编辑:

在阅读了一些答案之后,我想弄清楚一些事情,显然我还不够清楚:

我正在Webbrowsers中搜索设置

  1. 我不会更改远程Web服务器(Apache)的设置
  2. 我不会操纵远程计算机(.htaccess)上的任何文件
  3. 我不会在本地iMac上设置网络服务器
  4. 我不会在我的Javascript文件中更改AJAX调用的代码
  5. 我不会在远程服务器上更改Perl脚本的代码

我可以告诉你原因:

我只是做了短暂的维护,而且我懒得在编辑后将每个操作的文件上传到远程计算机。网络服务器的设置适合​​实际操作。我不想更改它们(也许在完成我的工作之前忘记所做的更改)。脚本也一样:某些您想更改的部分现在可以正常工作。没有理由触摸Ajax-
Call,因为在生产环境中它们没有错。

我只想让那些愚蠢的浏览器Firefox,Opera和Chrome像Safari一样运行,并正确处理Ajax调用。

顺便说一句:

请问有谁能解释从Firefox,Opera或Chrome浏览器中的另一个域通过Ajax调用数据有何风险,而在Safari中执行相同操作似乎无害?


问题答案:

chrome有一个插件,它将迫使其忽略安全策略。您也可以使用flags来做到这一点。请注意,请勿浏览启用了此功能的“真实网络”,因为这对您的计算机有安全风险。

FIREFOX

该线程表明在firefox中目前尚无此方法。

歌剧

同样,似乎没有一种内置的方式可以忽略CORS策略。

另一种方法是让服务器(http://my.domain.tld)返回正确的标头-具体来说Access- Control-Allow-Origin:



 类似资料:
  • 问题内容: 这是我的代码,用于在用户忘记密码的情况下重置用户密码。数据通过AJAX请求发送到PHP代码,PHP代码根据输入的有效性简单地回显“ Y”或“ N”。 问题是,AJAX调用在Firefox 19和IE 9中不起作用。我没有在其他版本的IE中尝试过。AJAX调用可在chrome和safari中完美运行。有人遇到过同样的问题吗?有人可以帮忙吗? 问题答案: 您必须使用事件对象作为事件处理程序

  • 问题内容: 我尝试在Firefox 15上使用,即使它在其他版本的Firefox和其他浏览器(例如Chrome和Safari)上也无法使用。 当我使用Firefox的检查器查看属性时,将被删除并显示错误“无效的属性值”。MDN和caniuse表示Firefox 4及更高版本支持该功能! 怎么会有时性能喜欢和一些浏览器的工作和在其他无效? 免责声明 :这是所有问题的规范重复,可通过添加供应商前缀来完

  • 问题内容: 在旋转动画中,只能在Chrome浏览器中使用,而不能在Firefox中使用。为什么? 问题答案: 当前的Firefox实施失败,除非时间值具有单位。使用或。 注意:W3C明确允许数字0(不带单位)作为长度值,但对于其他值则没有这种意义。我个人希望这种情况有所改变,但目前Firefox的行为并不正确。

  • 问题内容: 我正在使用开放式天气地图api网络服务进行ajax调用,以便使用纬度和经度获取当前天气,问题是同一调用在我的常规php文件夹中有效,但在我的phongap应用程序中不起作用。我的ajax调用如下所示 我没有尝试将其更改为,但没有任何效果。请帮助我,因为我目前对此仍然感到困惑。 问题答案: 您是否已将config.xml中的网址列入白名单? 了解更多:http : //docs.phon

  • 我正试着从我的twilio试用帐户拨出电话。我指的是这个链接。基于这个链接,我创建了一个名为hello-client-twiml.php的页面,代码如下: 有人能帮我解决这个问题吗?提前谢了。

  • 问题内容: 好吧,我会简短。我有这个脚本将值放在数据库中。它可以在Chrome,Safari中完美运行,但不能使其在Firefox或IE中运行。似乎数据甚至都没有发布到.php文件中,而ajax根本没有启动。有人吗 这是我的jQuery脚本: 这是我的php文件中的内容: 问题答案: 您没有将事件处理程序定义为参数,因此在 浏览器尝试在全局范围内查找。Chrome碰巧在全局范围内提供了事件对象(因