首先,我很失望该插件本身只有英文版。例如,如果用户单击“使用LinkedIn应用”按钮并登录到法语配置文件,则会正确显示。仅返回带有插件显示“已经应用”的英文页面。
为了解决这个问题,我写了一些javascript,在按钮加载后用法语等效替换“Apply with LinkedIn”和“Share”文本。我现在遇到的问题是按钮的“已经应用”版本。它似乎与实际插件异步加载,这意味着它在某些情况下会覆盖我的法语文本,但在其他情况下它不会覆盖。
我知道我可以在提交申请时利用onsuccess事件。但是,当LinkedIn用户重新访问该页面时,“已经应用”的文本并不总是以正确的语言显示。
问题1 :有没有人幸运有任何技术可以达到预期效果?
问题2 :当LinkedIn何时终于正确支持这个?
非常感谢任何帮助或指示。
谢谢!
更新
我可以确认Igor F.的解决方案是使用setInterval函数并检查每100ms进行一次更改是最好的选择,并且在所有经过测试的浏览器中都能完美运行。
感谢所有的帮助和建议!
答案 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)
从我收集的内容来看,这就是你所看到的问题:
......而且它是间歇性的,因为有时3发生在2之前。
我想不出这个问题的“好”解决方案,但我想听听伊戈尔的回答是否有效。我可以想到一个好的黑客:
异步调用必须以某种方式定位按钮,可能是通过其类名*。因此,在您将文本更改为法语后,将类名更改为其他内容。这样异步调用将失败,并且永远不会覆盖您的文本。
结果是LinkedIn将失去对此按钮的所有访问权限,但由于它是“已经应用”按钮,我认为这不重要。您还冒着丢失使用类名选择的CSS属性的风险,但是看看野外的LinkedIn按钮,我认为样式都是内联的(如果必须的话,你可以在新的类名下自己复制它们。)
祝你好运!* LinkedIn也可能存储JavaScript引用,而不是通过类名进行定位。这将更难追踪,但同样的规则适用:找到LinkedIn用来识别该按钮的页面的任何部分,并销毁它。