有没有一种标准的方法来定义在document.open调用中打开的href?

时间:2011-08-29 17:33:52

标签: jquery internet-explorer-7 internet-explorer-6 jquery-bbq

我正在处理的困境是在jquery-bbq code中,因为IE6和IE7不支持hashchange,所以它们会加载两次页面以便具有历史状态。

这会产生负面影响,因为代码在服务器端和客户端都运行两次。用于创建iframe的方法是:

  if ( is_old_ie ) {

    // Create hidden IFRAME at the end of the body.
    iframe = $('<iframe src="javascript:0"/>').hide().appendTo( 'body' )[0].contentWindow;

    // Get history by looking at the hidden IFRAME's location.hash.
    get_history = function() {
      return get_fragment( iframe.document.location.href );
    };

    // Set a new history item by opening and then closing the IFRAME
    // document, *then* setting its location.hash.
    set_history = function( hash, history_hash ) {
      if ( hash !== history_hash ) {
        var doc = iframe.document;
        doc.open().close();
        doc.location.hash = '#' + hash;
      }
    };

    // Set initial history.
    set_history( get_fragment() );
  }

创建了一个src为javascript:0的空白iframe。调用document.open方法,它似乎抓取父窗口的location.href作为以.open打开的页面的默认值。

我基本上必须修改代码,以便它不会打开相同的网址两次,所以我希望覆盖默认值并指定一个参数,例如?iframe = true。

示例:

http://example.com/views/step-2?one=two

在IE中,上面的页面被加载,然后再次加载到iframe中。服务器端代码执行两次,但我不希望这种情况发生。

我想将&iframe=1附加到URI,以便在指定iframe参数时阻止我的服务器端代码运行。

最明显的两件事是:

  1. 设置iframe的src,但这可能会产生负面影响,我很确定这是有原因的。
  2. 使用document.open.close而不是使用iframe.location.href,而是手动将其设置为href。
  3. 如果有人有iframe黑客的经验,我会非常感谢一些提示。

    编辑:我想到的另一种解决方法是通过iframe / ajax加载一个页面,该页面在iframe执行document.open之前设置会话变量,这会创建一个'iframeloading的会话变量'等于1,并在iframe加载上设置一个加载事件处理程序将其设置为0,如果session var设置为1,则调整我的服务器端代码不执行。例如:

    $('<iframe src="/iframe-loading.php"/>').hide().appendTo('body');
    document.open().close()
     $( document.defaultView ).load(function() {
        $('<iframe src="iframe-doneloading.php/>').hide().appendTo('body');
    });
    

1 个答案:

答案 0 :(得分:1)

关于“是否有标准的方法来定义在document.open调用中打开的href?”

不,没有。