2

首先,我对插件本身只有英文感到失望。例如,如果用户单击“使用 LinkedIn 应用”按钮并登录到法语个人资料,则它会正确显示。只返回一个页面,该页面的插件以英文显示“已应用”。

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

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

问题 1:有没有人幸运地使用任何技术来达到预期的结果?

问题 2:LinkedIn 什么时候才能真正支持这个?

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

谢谢!

更新:

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

感谢所有的帮助和建议!

4

2 回答 2

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>

更多关于突变事件的信息在这里。如果你想支持 IE < 9,你需要一种不同的方法。可能会定期检查,例如每 100 毫秒,网页是否包含英文按钮并将其更改为法文。请参阅setInterval()。这应该是面向未来的(不推荐使用突变事件),但可能效率更低(缓慢)。

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

于 2012-05-17T11:58:48.750 回答
0

据我所知,这是您看到的问题:

  1. 该按钮最初加载文本“已应用”。
  2. 您修改按钮文本以将文本更改为法语。
  3. LinkedIn 修改按钮文本以将其更改为“已应用”。

...而且它是间歇性的,因为有时 3 发生在 2 之前。

我想不出这个问题的“好”解决方案,但我想听听 Igor 的答案是否有效。我想到一个很好的技巧:

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

结果是 LinkedIn 将失去对该按钮的所有访问权限,但由于它是一个已经应用的按钮,我认为这并不重要。您也有丢失使用类名选择的 CSS 属性的风险,但是看看野外的 LinkedIn 按钮,我认为这些样式无论如何都是内联的(如果必须,您总是可以自己将它们复制到一个新的类名下。)

祝你好运!


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

于 2012-05-20T01:04:26.290 回答