1

私が持っているもの:新しいデータがajax呼び出しから取得されると、ページタイトルが動的に更新されます。このページのタブにアクセスした場合 - タイトルはデフォルト値に設定されます。このページで 2 番目のタブを開くと、このタブのタイトルがデフォルトに設定されます (これを修正する必要があります)

必要なもの: ページ タイトルは、このページのすべてのタブで同じでなければなりません。つまり、すべてのタブでページ タイトルを同期的に更新する必要があります。

私の現在の実装:

var prevData;
var newRequestsCounter = 0
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // retrieve and parse data. i skip this part
                  // newRequestsCounter is updating here
                  var visible = vis();
                  if (visible){
                      newRequestsCounter = 0
                      document.title = 'Default title'
                  } else {
                     if (newRequestsCounter == 0) {
                         document.title = 'Default title'
                     } else {
                         document.title =  'Dynamic title'
                     }
                  }

                  setTimeout(getRequests, 2000)
              }
          });
};

intercom.jsでやってみましたが、うまく動きません。なぜかintercom.onは毎回違うデータを取得します。例: 最初の呼び出し - デフォルトのタイトル、2 番目の呼び出し - 動的なタイトル。デバッグで確認しましたが、この行 setTimeout(getRequests, 2000) を実行した後に間違ったデータが表示されます。

var intercom = Intercom.getInstance();

intercom.on('notice', function(data) {
    document.title = data.title;
});
var prevData;
var newRequestsCounter = 0
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // retrieve and parse data. i skip this part
                  // newRequestsCounter is updating here
                  var visible = vis();
                  if (visible){
                      newRequestsCounter = 0
                      intercom.emit('notice', {title: 'Default title'});
                  } else {
                     if (newRequestsCounter == 0) {
                         intercom.emit('notice', {title: 'Default title'});
                     } else {
                         intercom.emit('notice', {title: 'Dynamic title'});
                     }
                  }

                  setTimeout(getRequests, 2000)
              }
          });
};

一般に、単一の ajax コールバックの範囲で必要な機能を実現できるかどうかはよくわかりません。次のコードを試しました。この場合、localStorage の変数「カウンター」は、新しいタブを開くたびにインクリメントされます。これは、2 つのタブのタイトルに「3」が必要な場合、代わりに 2 つのタブで「6」を取得することを意味します。

var intercom = Intercom.getInstance();

intercom.on('notice', function(data) {
    document.title = data.title;
});

if (localStorage.getItem("counter") === null){
    localStorage.setItem("counter", 0);
}
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // skip part with retrieving and parsing data

                        var counter = localStorage.getItem("counter")
                        localStorage.setItem("counter", ++counter);
                  var visible = vis(); 
                  if (visible){
                      localStorage.setItem("counter", 0);
                      intercom.emit('notice', {title: 'Default'});
                  } else {
                     if (localStorage.getItem("counter") == 0 || localStorage.getItem("counter") === null) {
                         intercom.emit('notice', {title: 'Default'});
                     } else {
                         intercom.emit('notice', {title: '(' + localStorage.getItem("counter") + ') requests'});
                     }
                  }
                  setTimeout(getRequests, 2000)
              }
          });
};
getRequests();
4

2 に答える 2

0

あなたのコードで私が理解していない部分は、新しいブラウザー タブを開いている場所です。しかし、それがどこかで起こっていて、その新しいタブのタイトルをその開始として設定したい場合は、次のようにすることができます:

var newTab = window.open('/page')
newTab.title = 'New Title';
于 2016-10-19T14:18:03.737 に答える