2

まず、プラグイン自体が英語のみなのが残念です。たとえば、ユーザーが [LinkedIn で適用] ボタンをクリックしてフランスのプロファイルにログインすると、正しく表示されます。プラグインが英語で「適用済み」と表示されているページに戻るだけです。

これを回避するために、ボタンがロードされた後に「LinkedIn で申し込む」および「共有」のテキストをフランス語の同等のものに置き換える JavaScript を作成しました。私が今抱えている問題は、ボタンの「適用済み」バージョンにあります。実際のプラグインに非同期的に読み込まれるように見えます。つまり、場合によってはフランス語のテキストを上書きしますが、そうでない場合もあります。

アプリケーションが送信されたときに onsuccess イベントを利用できることを知っています。ただし、その LinkedIn ユーザーがページに再度アクセスすると、「既に適用済み」というテキストが常に正しい言語で表示されるとは限りません。

質問 1 : 希望する結果を達成するためのテクニックを身につけた人はいますか?

質問 2 : LinkedIn が最終的にこれを適切にサポートするのはいつですか?

どんな助けや指示も大歓迎です。

ありがとう!

アップデート:

setInterval 関数を使用して 100 ミリ秒ごとに変更をチェックする Igor F. のソリューションが最適なオプションであり、テストしたすべてのブラウザーで問題なく動作したことを確認できます。

すべての助けと提案をありがとう!

4

2 に答える 2

2

プラグインは、サーバーから非同期に情報を受け取り、それに基づいて動作するようです。つまり、ページのコンテンツを変更します。DOM ミューテーション イベントをリッスンしてみましたか?

以下は、ユーザーが Web ページに変更を加えた場合にどのように機能するかの例です。

<html>
  <!-- This is just mock-up to allow user to modify the DOM -->
  <body>
    Text to add: <input id="in1" type="text"/>
    <button onclick="addNode();">Add node</button>
    <p id="toAdd"></p>
  </body>

  <script type="text/javascript">
    function addNode() {  // adds a text node to the <p> element
      document
        .getElementById("toAdd")
        .appendChild(document
          .createTextNode(document
            .getElementById("in1")
            .value
          )
        );
    }

    ///////////////////////////////////////
    // Here comes the interesting part: !!!
    document
      .getElementById("toAdd")  // listen to modifications of the <p> element
      .addEventListener(
        "DOMSubtreeModified",   // in this case all modifications of its subtree
        function() {
          alert('Modified!');   // change this to whatever fits your purpose
        }
      );
  </script>
</html>

ミューテーション イベントの詳細については、こちらをご覧ください。IE < 9 をサポートしたい場合は、別のアプローチが必要になります。Web ページに英語のボタンが含まれているかどうかを定期的に、たとえば 100 ミリ秒ごとにチェックして、フランス語に変更します。setInterval()を参照してください。これは将来的にも保証されるはずですが (変異イベントは非推奨)、おそらくさらに非効率的です (遅い)。

いずれにせよ、それはハックです。プラグインの言語コード パラメータを許可するなど、クリーンなソリューションを提供できるのは LinkedIn だけです。

于 2012-05-17T11:58:48.750 に答える
0

私が集めたものから、これはあなたが見ている問題です:

  1. ボタンは、最初に「適用済み」というテキストでロードされます。
  2. ボタンのテキストを変更して、テキストをフランス語に変更します。
  3. LinkedIn は、ボタンのテキストを変更して、「既に適用済み」に変更します。

...そして、3 が 2 の前に発生することがあるため、断続的です。

Igorの答えがうまくいくかどうか聞きたいのですが、この問題に対する「良い」解決策は思いつきません。私は良いハックを考えることができます:

非同期呼び出しは、おそらくクラス名*を通じて、何らかの方法でボタンをターゲットにしている必要があります。したがって、テキストをフランス語に変更したら、クラス名を別のものに変更します。この方法では、非同期呼び出しは失敗し、テキストが上書きされることはありません。

その結果、LinkedIn はこのボタンへのすべてのアクセスを失うことになりますが、これは既に適用済みのボタンであるため、問題にはならないと思います。また、クラス名を使用して選択した CSS 属性を失うリスクもありますが、実際の LinkedIn ボタンを見ると、スタイルはすべてインライン化されていると思います (必要に応じて、新しいクラス名でいつでも自分で複製できます)。

幸運を!


* LinkedIn が、クラス名によるターゲティングではなく、JavaScript 参照を保存している可能性もあります。これを突き止めるのは難しくなりますが、同じルールが適用されます。LinkedIn がそのボタンを識別するために使用するページの部分を見つけて、それを破棄します。

于 2012-05-20T01:04:26.290 に答える