【问题标题】:Is "javascript:function()" a URL?“javascript:function()”是一个 URL 吗?
【发布时间】:2011-03-10 14:40:08
【问题描述】:

通过the WebView demo,我注意到以下语句:

  mWebView.loadUrl("javascript:wave()");

它有效,但我不明白语法。为什么“javascript:function()”作为 WebView.loadUrl() 的 URL 参数工作?

【问题讨论】:

  • 作为一个有趣的切线,当“javascript:”用作“onfoo”属性(“onclick”、“onblur”等)值中的前缀时,它不是“特殊”,而是当处理函数被合成时,只是被 JavaScript 视为语句标签。
  • @Pointy 感谢您提供此信息。有很多东西要学... :)

标签: javascript android webview android-webview


【解决方案1】:

是的,虽然在标准轨道上不是很远:https://datatracker.ietf.org/doc/html/draft-hoehrmann-javascript-scheme-03

函数的返回值应该是要渲染的文档。

【讨论】:

  • wave() 函数只包含语句 document.getElementById("droid").src="android_waving.png";,没有返回语句。
  • 因为它什么都不返回,所以没有要渲染的文档,浏览器也不会对返回结果做任何事情。代码的作者依赖于 javascript: url 的副作用,而不是将其用于该方案的设计目的。
【解决方案2】:

<a href="javascript:alert('test')">link text</a>一样 您的浏览器知道这是 javascript 并启动命名函数。

【讨论】:

  • 我从您的回答中了解到,这是一种标准的浏览器表示法,并不特定于 WebView。谢谢你。 (对不起,我只知道 Javascript 基础,没有太多经验)
【解决方案3】:

是的,它是一个 url,它定义了一些要在当前页面的全局范围内运行的 javascript 功能。

这是小书签的工作方式

【讨论】:

  • 感谢您在“当前页面的全局范围内”明确这一点。
【解决方案4】:

如果您知道“重载”某些东西的概念,请这样想。浏览器旨在检查您在地址栏中输入的字符串(或作为 href 传递),如果它以字符串文字“javascript:”开头,它知道将后面的内容作为 javascript 执行,而不是将其视为 URL .

【讨论】:

  • 是的,但它如何知道从哪个 HTML 文档中获取 javascript?
  • 它执行javascript:之后的javascript,在这种情况下它执行wave()。如果在当前加载的文档中定义了函数wave(),它将执行它。
【解决方案5】:

这叫Bookmarklet

这里有一些例子:http://www.bookmarklets.com/

【讨论】:

  • 所有答案都非常好,很有教育意义。很遗憾,我只能接受一个。
  • 它不称为书签。 Bookmarket 是指将 javascript: scheme URI 作为书签存储在浏览器中,以便用户可以在任意页面上运行它(同样,通常是为了副作用,而不是实际将其用作 URL)。此示例不将其存储在书签中。
猜你喜欢
  • 2017-01-08
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 2014-07-02
  • 2016-08-24
相关资源
最近更新 更多