【问题标题】:Cordova 5.0 javascript embeded in html have no effect on android devicehtml中嵌入的Cordova 5.0 javascript对android设备没有影响
【发布时间】:2026-02-11 13:05:02
【问题描述】:

我是cordova的新手,从使用cordova 5.0开始。

我配置了环境,并从 CLI 创建了一个实例,并在 android 设备上运行它:

cordova create hello com.example.hello HelloWorld
cd hello
cordova platform add android
cordova run android

经过以上四个指令,我创建了一个实例,并让它在我的安卓手机上运行。


我的编码努力:

该实例包含一个 www 文件夹,我认为我应该处理它。

好的,我尝试更改 index.html 标记,一切顺利并得到显示。

但是当我尝试在html中添加一段嵌入的javascript时,我发现它不起作用:

<body>
    <div class="app">
        <h1>Apache Cordova</h1>
        <div id="deviceready" class="blink">
            <p class="event listening">Connecting to Device</p>
            <p class="event received">Device is Ready</p>
        </div>
    </div>
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script>
        alert('hello world!');
    </script>
</body>

然后,我改变我的方法,我创建一个site.js 并导入它,然后在其中做警报,我工作了!

index.html:

<body>
    <!-- ... -->
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script type="text/javascript" src="js/site.js"></script>
</body>

site.js:

alert('Hello world!');

我觉得很奇怪,很好奇它为什么会这样。

我找到了文档并用谷歌搜索了它,但都没有运气。

所以我求助于你。


我的问题

  1. 嵌入脚本没有效果是什么原因,可以吗?
  2. 在这种情况下我应该如何编码?如何放置我的脚本是安全的?

【问题讨论】:

  • 重点是,您必须在 deviceready 事件之后调用您的脚本。见:cordova.apache.org/docs/en/5.0.0/…
  • @Joerg 不,不是这个问题,我把cordova版本改成3.6,一切顺利!那一定是个bug!
  • 您是否尝试在 cordova 5 中的 deviceready 事件之后发出警报?
  • @Joerg 是的,我只是将脚本放在 html 文件或外部 js 文件中,结果不同。但是当我回到 3.6 时一切都很好。花了这么多时间。你可以试试5.0,我发现问题太多了。

标签: javascript android jquery html cordova


【解决方案1】:

我可能与浏览器渲染有关。我有一个脚本,不是“警报”而是 document.write()”。该脚本有效。我没有在 Android 或 iOS 中尝试过该应用程序,但在浏览器中使用了 only。看看随附的图片。

【讨论】:

    【解决方案2】:

    cordova 5 没有问题,我在几个项目中使用它。 Cordova 是事件驱动的,这意味着您必须在 cordova 告诉您它已准备好之后调用您的所有逻辑。

    你把你的逻辑,警告的东西,放在 HTML-Body 中,这意味着,你不能保证它是在 cordova 准备好之后调用的。

    你的项目中最重要的是,你有这几行代码:

    document.addEventListener("deviceready", onDeviceReady, false);
    
    function onDeviceReady() {
        // Now safe to use device APIs
    }
    

    如果你想在你的项目中有一个简单的警报,代码是:

    document.addEventListener("deviceready", onDeviceReady, false);
    
    function onDeviceReady() {
        alert("Hi fish_ball");
    }
    

    也许 3.6 在您的设备上更快,谁知道呢?但这是唯一可行的方法。

    我不知道你的 index.js 里面有什么,如果它是你从 cordova 安装中得到的,那么你会在那里找到 deviceready 的事件处理程序。

    来吧,这并不难。你的结构是:

    <html>
    <head>
    <script src="cordova.js">
    <script src="yourScript.js">
    <head/>
    <body>
    <body>
    

    在您的 «yourScript.js» 中,您将代码放在上面。

    最后一次:不要将 Javascript 放入 HTML 中,直到您不确定 Cordova 正在加载或更通用:不要在 deviceready-function 之外使用 Javascript。

    【讨论】:

    • 我只是安装了cordova 5,创建了一个项目,在index.html的底部嵌入了一个&lt;script&gt;alert(1);&lt;/script&gt;,它不起作用,但是在3.6中,这个指令是可以的。跨度>
    • 不知道是不是环境的原因,但确实是有问题。