4

私の Kynetx アプリはfloat_html()、コンテンツでいっぱいのボックスを配置するために使用します。

rule float_box {
  select when pageview ".*"
  pre {
    content = <<
      <div id='messagebox'>
      <h3>Floating Message Box</h3>
      <ul id='my_list'></ul>
      </div>
    >>; // trippy
  }
  float_html("absolute","top:25px","right:20px",content);
}

rule fill_box {
  select when pageview ".*"
  foreach ["alpha","bravo","charlie"] setting (list_item)
  append("#my_list", "<li>#{list_item}</li>");
}

アプリ (a421x27) はブックマークレットから使用されます。同じページでブックマークレットを 2 回クリックすると、コンテンツが 2 つ表示されます。

ボックスが既に画面に表示されていることを検出して再利用する方法はありますか?

4

1 に答える 1

4

jQuery を使用してコンテンツを手動でフロートし、既に存在するかどうかを確認できます。

ruleset a60x516 {
  meta {
    name "so-answer-example"
    description <<
      so-answer-example
    >>
    author "Mike Grace"
    logging on
  }

  rule float_box {
    select when pageview ".*"
    pre {
      content = <<
        <div id='messagebox'>
        <h3>Floating Message Box</h3>
        <ul id='my_list'></ul>
        </div>
      >>; /// fixing syntax highlighting bug
    }
    {
      emit <|
        if ($K("#messagebox").length == 0) {
          $K(content).css({
            "position": "absolute",
            "top": "25px",
            "right": "20px"
          }).appendTo(document.body);
        };
      |>;
    }
  }

  rule fill_box {
    select when pageview ".*"
    foreach ["alpha","bravo","charlie"] setting (list_item)
    {
      append("#my_list", "<li>#{list_item}</li>");
    }
  }
}

example.com でこのコードのブックマークレットを数回クリックすると、次のようになります。 代替テキスト


補足:

アクションは常に {} で囲みます。アクションが 1 つしかない場合、アクションは {} でラップしなくても機能しますが、アクション ブロックを {} でマークする習慣を身に付けることが最善です。

于 2010-12-27T19:17:24.263 に答える