最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - jQuery.load() responds with error under Firefox, works fine under Chrome - Stack Overflow

programmeradmin1浏览0评论

I have a function to open a page in a dialog box instead of the main window. A bit cleaned up code is the following:

var baseurl = window.location.origin + '/static/docs/'

function onClickLink(event) {
  event.preventDefault();
  if ($("#dialog").length == 0) {
    setUpDialog()
  }
  var href = event.target.href;
  href = baseurl + href.substring(1 + href.lastIndexOf('/'));
  $("#dialog").load(href + ' .body', function(response, status, xhr) {
    if (status == "error") {
      window.location = event.target.href;
    } else {
      changeImageSrc();
      reStructure();
    }
  });
  $("#dialog").dialog({
    modal: true,
    title: event.target.text,
    width: 960,
    position: ['center', 100]
  });
}

This code works fine in Chrome, but the (status == "error") is executed under Firefox. Seemingly there is a 404 error for Firefox, might be an image of the loaded page, or something similar.

Any ideas how to get the Chrome behavior under Firefox too? (you can find a working example here)

I have a function to open a page in a dialog box instead of the main window. A bit cleaned up code is the following:

var baseurl = window.location.origin + '/static/docs/'

function onClickLink(event) {
  event.preventDefault();
  if ($("#dialog").length == 0) {
    setUpDialog()
  }
  var href = event.target.href;
  href = baseurl + href.substring(1 + href.lastIndexOf('/'));
  $("#dialog").load(href + ' .body', function(response, status, xhr) {
    if (status == "error") {
      window.location = event.target.href;
    } else {
      changeImageSrc();
      reStructure();
    }
  });
  $("#dialog").dialog({
    modal: true,
    title: event.target.text,
    width: 960,
    position: ['center', 100]
  });
}

This code works fine in Chrome, but the (status == "error") is executed under Firefox. Seemingly there is a 404 error for Firefox, might be an image of the loaded page, or something similar.

Any ideas how to get the Chrome behavior under Firefox too? (you can find a working example here)

Share Improve this question edited Jul 5, 2019 at 12:22 Salman Arshad 272k84 gold badges443 silver badges534 bronze badges asked Mar 21, 2011 at 9:31 AkashaAkasha 2,2121 gold badge31 silver badges51 bronze badges 2
  • Carry out an alert() on baseurl to test the variable is the same value on both browsers – Curtis Commented Mar 21, 2011 at 9:43
  • window.location.origin is undefined. – Salman Arshad Commented Mar 21, 2011 at 10:07
Add a ment  | 

4 Answers 4

Reset to default 10
  1. In FireFox, window.location.origin is undefined. FireFox therefore tires to get the page:

    http://openerp.co.hu/hu/funkcionalis-bemutato/undefined/static/docs/sales.html

    and fails

  2. In chrome, window.location.origin http://openerp.co.hu. Chrome ties to get the page:

    http://openerp.co.hu/static/docs/sales.html

    and succeeds

Instead of relying on window.location.origin, try using:

window.location.protocol + "//" + window.location.host

why firefox doesn't support window.location.origin (it's not standard)

tl;dr

sometimes you need this instead of the previously selected answer:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

explanation

I need to get the length of window.location.origin aka window.location.protocol+'//'+window.location.host. Simply replacing the former with the latter, doesn't work.

window.location.protocol+'//'+window.location.host.length will return something like http://25, which is the protocol and the length of window.location.host concatenated on the end.

I got around this by making a variable, like so:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

After that, I could get the length of $window_location_origin which would be that original 25 (window.location.host.length) plus the 7 from window.location.protocol+'//', giving me the desired 32.

Any error message in particular? Also, update your code with the ones below:

var baseurl = window.location.origin  + '/static/docs/';

function onClickLink(event) {
    event.preventDefault();

    if($("#dialog").length==0) {
        setUpDialog();
    }

    var href = event.target.href;

    href = baseurl + href.substring(1+href.lastIndexOf('/'));

    $("#dialog").load(href + ' .body', function(response, status, xhr) {
      if (status == "error") {
        window.location = event.target.href;
      } else {
        changeImageSrc();
        reStructure();
      }
    });

    $("#dialog").dialog({
        modal:true, 
        title:event.target.text,
        width: 960,
        position: ['center', 100]
    });
}

404 means "page not found".

Set a breakpoint and check the URL which causes the problem. Is it really valid?

Maybe Chrome is more lenient when it es to illegal characters in the URL than Firefox or something like that. Try to paste the URL into a location bar in both browsers to see what you get.

发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>