2013-12-16 21 views
0

我在Android中开发混合应用程序时遇到了一个奇怪的问题,并且实际上设法在Chrome中重现它。Javascript链接 - 尝试设置元素值 - 怪异行为chrome&android

的基础理念是输入域的HTML页面,并尝试使用JS注射设定值:

javascript:document.getElementById('intest').value = '1111'; 

如果开放的JavaScript链接,JS的命令,而不是设置文本输入字段 - 整个页面将被您输入的值替换。

这是我使用演示的HTML:

<html> 
<body> 
<p>&lt;input id=&#39;intest&#39; type=&#39;text&#39; /&gt;</p> 
<input id='intest' type='text' /> 
<br/> 
<h3>JS Command</h3> 
<a href="javascript:document.getElementById('intest').value = '1111';">javascript:document.getElementById('intest').value = '1111';</a> 
</body> 
</html> 

如果您在控制台中输入相同的命令,将设置输入字段的值如预期。

在Android中,使用webview.loadURL('javascript:....')时的行为是相同的。

任何想法为什么会发生这种情况?

P.S.我创建了一个简单的HTML页面来玩: https://dl.dropboxusercontent.com/u/453866/injectiontest.html

更新,这也是在IExplorer和Firefox的情况。

回答

1

这很奇怪,即使您在点击锚标签后检查页面,仍然可以看到标记。我发现如果您在更改其值后按预期工作,则添加return false;。我在Chrome上进行测试,而不是在Android上进行测试。

<a href="javascript:document.getElementById('intest').value = '1111'; return false;">javascript:document.getElementById('intest').value = '1111'; return false;</a> 
+0

尼斯发现与“返回假”,你哟有一个解释为什么这会改变什么? – Raanan

+0

这是一种防止默认浏览器行为的方法,比如'event.preventDefault()' – NaNpx

+0

所以,我猜这是一个错误,因为我无法想象这里的“默认”期望的行为。 – Raanan