使用LinkedIn插件 - 语言支持

时间:2012-05-10 16:01:24

标签: javascript linkedin

首先,我很失望该插件本身只有英文版。例如,如果用户单击“使用LinkedIn应用”按钮并登录到法语配置文件,则会正确显示。仅返回带有插件显示“已经应用”的英文页面。

为了解决这个问题,我写了一些javascript,在按钮加载后用法语等效替换“Apply with LinkedIn”和“Share”文本。我现在遇到的问题是按钮的“已经应用”版本。它似乎与实际插件异步加载,这意味着它在某些情况下会覆盖我的法语文本,但在其他情况下它不会覆盖。

我知道我可以在提交申请时利用onsuccess事件。但是,当LinkedIn用户重新访问该页面时,“已经应用”的文本并不总是以正确的语言显示。

问题1 :有没有人幸运有任何技术可以达到预期效果?

问题2 :当LinkedIn何时终于正确支持这个?

非常感谢任何帮助或指示。

谢谢!

更新

我可以确认Igor F.的解决方案是使用setInterval函数并检查每100ms进行一次更改是最好的选择,并且在所有经过测试的浏览器中都能完美运行。

感谢所有的帮助和建议!

2 个答案:

答案 0 :(得分:2)

该插件似乎从服务器异步接收其信息并对其进行操作,即更改页面内容。您是否尝试过侦听DOM突变事件?

以下是用户在网页中进行更改时的工作原理示例:

<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>

有关突变事件的更多信息here。如果你想支持IE&lt; 9,你需要一个不同的方法。也许定期检查,例如每100毫秒,网页是否包含英文按钮并将其更改为法文。见setInterval()。这应该是面向未来的(突变事件已被弃用),但可能效率更低(慢)。

无论如何,这是一个黑客攻击。只有LinkedIn才能提供干净的解决方案,例如允许插件的语言代码参数。

答案 1 :(得分:0)

从我收集的内容来看,这就是你所看到的问题:

  1. 按钮最初加载文本“已经应用”。
  2. 您可以修改按钮文本以将文本更改为法语。
  3. LinkedIn修改按钮文本以将其更改为“已经应用”。
  4. ......而且它是间歇性的,因为有时3发生在2之前。

    我想不出这个问题的“好”解决方案,但我想听听伊戈尔的回答是否有效。我可以想到一个好的黑客:

    异步调用必须以某种方式定位按钮,可能是通过其类名*。因此,在您将文本更改为法语后,将类名更改为其他内容。这样异步调用将失败,并且永远不会覆盖您的文本。

    结果是LinkedIn将失去对此按钮的所有访问权限,但由于它是“已经应用”按钮,我认为这不重要。您还冒着丢失使用类名选择的CSS属性的风险,但是看看野外的LinkedIn按钮,我认为样式都是内联的(如果必须的话,你可以在新的类名下自己复制它们。)

    祝你好运!


    * LinkedIn也可能存储JavaScript引用,而不是通过类名进行定位。这将更难追踪,但同样的规则适用:找到LinkedIn用来识别该按钮的页面的任何部分,并销毁它。