Articles of JavaScript

在WebView中注入Javascript桥梁

我想从Android的网页中抽取一些东西。 我知道有图书馆来parsingHTML,但我想也许我可以做一点点的欺骗。 这是我正在做的事情 使用应用程序上下文以编程方式创buildWebView,因此不必在UI中显示。 加载网页 附加JS界面 注入一些Javascript与主机应用程序进行交互 这是一些代码… public void getLatestVersion(){ Log.e("Testing", "getLatestVersion called…"); WebView webview = new WebView(context.getApplicationContext()); webview.loadUrl("https://example.com"); webview.addJavascriptInterface(new jsInterface(), "Droid"); webview.loadUrl("javascript: window.onload=function(){ Droid.showToast('testing!'); }"); } class jsInterface{ @JavascriptInterface public void showToast(String message){ Log.e("Testing", message); Toast.makeText(context, message, Toast.LENGTH_LONG).show(); } } 由于WebView在用户界面中不可见,因此很难判断哪个部分已经损坏。 我所知道的是调用的第一个Log被调用,但JavascriptInterface中的Log和Toast从不显示。 我试图做甚至可能吗? 如果是这样,我做错了什么? 如果没有,为什么不呢? 编辑 在用户界面中停留testing视图,显然第二次调用loadUrl不起作用。 无论我尝试注入什么Javascript,它都不起作用。 编辑2 我觉得愚蠢的忘记启用Javascript,但它仍然不工作..我已经添加了以下几行.. WebSettings webSettings = […]

input上的事件监听器(onkeypress,onkeydown)在Android数字键盘上不起作用

我不知道为什么,但经过数小时的处理,我可以说有什么不对劲。 我有一个简单的input <input type="number"> 我希望它只接受数字(数字[0-9]),没有更多。 为了达到这个目的,我添加了一个事件监听器来控制事件的键码。 没有什么特别的,几乎所有的平台上的一切工作,与Android的问题。 在这里 types=“数字” 导致数字键盘出现 – 这很好 – 还有一些其他字符(逗号,点,连字符…)。 当你按下这个特殊字符时,这个行为很奇怪: onkeypress事件:绝对不会开火 (为什么???) onkeydown事件:事件正在触发,相关函数被调用。 问题是浏览器已经input了字符 (为什么??),所以不可能调用“event”的“preventDefault”函数。 input事件:事件正在触发,但“事件”对象的“代码”和“哪些”属性未定义。 而且,和以前一样,浏览器已经input了字符 。 我错过了什么? 我的环境由AngularJs支持,所以我在一个指令中设置了事件监听器。 但是用jQuery做同样的事情并不能解决问题。 有人可以build议使用“$parsing器”来推送我的自定义值,而不需要的字符。 无论如何,这不工作我猜,因为input的types是“数字”,它只期望数字(另一种方式来说Android上的浏览器做错了什么..) 这里有一个工作小提琴 ,在Android上打开它。 谢谢

Raphaeljs图书馆和智能手机

我在我的网站上使用了叫做raphaeljs的worderfull javascript库来绘制地图,animation和animationfunction。 我注意到,使用这个库的脚本完全适用于iPhone,但不适用于Android 。 有人可以证实这一点(只要在raphaeljs的演示页面会告诉你,如果它不起作用),如果没有,有人知道为什么,什么可以testing。 谢谢

移动webkit内存消耗

我们正在为移动设备(Android + iOS)开发HTML5应用程序。 但是最大的问题是内存消耗 – 内存使用量增长非常快,应用程序变得迟缓。 与HTML(JavaScript)应用程序中的内存泄漏作斗争的最佳实践,提示,工具,解决scheme等是什么? PS我们只针对Webkit浏览器

点击在WebView中不起作用

我有我的android应用程序的webview。 我已经加载了url: https : //imsnsit.org/imsnsit/notifications.php 有各种通知的链接。 当我点击它们时,我的WebView没有任何作用。 它正在处理所有其他事情 – Chrome(Android),Chrome(桌面)。 链接很好。 有一件事我注意到通知有PHP文件的href。 只是导航到该链接不起作用。 我得到无效的操作。 再加上链接不是静态的,每次刷新页面时都会改变(只是plum_url.php的参数)。 我已经在使用这些function。 没什么帮助。 webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setDomStorageEnabled(true);

Android的webview SKIPS JavaScript甚至与setJavascriptEnabled(true)和WebChromeClient

(使用三星Galaxy Tab和Android 3.0,这是打算在每个3.0+平板电脑上工作,就像在他们的浏览器,而不是webview) 我有一个CSS和jQuery的页面,在浏览器,Android浏览器和iOS设备上加载罚款,但android webview拒绝加载它一贯。 我已经缩小了这个问题,只是简单地跳过JavaScript的负载(通过复制一些webview的JavaScript演示应用程序的问题)。 为什么是这样? 这里是完整的testingHTML代码http://pastebin.com/GmE2vEYx 这就是我所说的: myWebview.loadUrl("file:///android_asset/myPage.html"); myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); 这三个调用的顺序不会影响结果。 myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); myWebview.loadUrl("file:///android_asset/myPage.html"); 我注意到的一件事是,如果你花时间(通过在debugging器中暂停一个断点的应用程序),那么JavaScript将更加一致的加载。 这导致我进行了一些尝试使应用程序加载速度变慢的牵强的实验,但这实际上并不是所需的用户体验。 我真的希望Android的webview真的不是移动开发的IE6。 其他事实: 如果删除包含所有Jquery的<script>标记,则页面会快速加载所有CSS格式。 一旦Jquery被添加,什么都不加载。 我还发现了几个其他问题,遇到完全相同的问题,许多人没有回答,或没有确切的答案OP是寻求:( 请参阅: Android:无法获取JavaScript即使使用setJavaScriptEnabled也可以在WebView上工作(true) 页面重新加载(Webview.loadUrl)导致Javascript未被(完全)处理 http://groups.google.com/group/android-developers/browse_thread/thread/9962064ef217a5a7# JavaScript有时在android的webview中不起作用 Android WebView不加载JavaScript文件,但Android浏览器加载它很好 Android的Webview无法处理JavaScript? build议? 让我们来看看这个! android文档说webview有局限性,但是我不知道限制在哪里,因为人们总是在制作HTML CSS JS应用程序!

如何在移动networking应用程序(Android Browser / iOS-Mobile Safari)上禁用横向/纵向切换

我正试图禁用影响我的HTML5移动应用程序的网页的电话轮换。 没有重新布局,resize,orientationchange行为。 我需要它,以便旋转手机,加载的初始布局将保持不变,迫使用户以原始方向使用应用程序。 用户逻辑有许多微妙之处,我真的觉得这是我的应用程序需要的,所以请不要评论这个select,而是帮助我的问题在第一句话。 我试着听两个'orientationchange'和'resize'的事件,并调用preventDefault并停止传播,以防止任何浏览器行为重新组织页面,以适应横向视图转动。 那么,显然阻止任何(理想)。 window.addEventListener("orientationchange", function (e) { e.preventDefault(); e.stopPropagation(); }, false); window.addEventListener("resize", function (e) { e.preventDefault(); e.stopPropagation(); }, false); 完全没有区别。 浏览器仍然在Android上重新组织(pre2.1和之后)和iPhone 4-5页面。 尝试过meta标签 <meta name="viewport" content="initial-scale=1.0, user-scalable=no /> 然后生气,尝试 <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width" /> 没有什么区别。 在StackOverflow上狂怒地看着,看到我在第一步做了什么,在那里放了几次…再次尝试,以确保我没有搞砸了。 没有工作。 吸了我的骄傲,然后决定由于骄傲继续跑进一堵砖墙,然后真的吸了我的骄傲,张贴在这里。 HALP。

phonegap:是否有可能从Javascript检测swipeLeft和SwipeRight触摸?

我问如果一个Phonegap应用程序能够识别JavaScript中的swipeLeft和SwipeRight相关的事件。

fabric.js调整canvas以适合屏幕

我目前正在用离子和cordova开发移动设备上的应用程序(android和iPhone)。 我想编辑一张图片。 我使用fabric.js库来做到这一点。 Fabric.js将图像和其他项目转换为canvas。 然后我在canvas(贴纸)上添加一些图像,并将其导出为图像(dataURL)。 所以canvas的大小是非常重要的,因为它是一个质量因素(导出基于小canvas的图像将导致质量差)。 canvas大小约为607 * 1080像素(取决于拍摄照片的设备)。 我想适应它在屏幕上不失去质量(如下面解释,我不能调整canvas不失去质量)。 我尝试了3个想法,但没有人工作。 调整canvas大小 :导致质量丢失(导出的图像将具有canvas大小) 适应视口 :cordova不允许更改移动设备上的视口。 有一个解决方法,但它会打破我的devise(非常小的导航栏,较小的菜单,…) 使用CSS3缩放属性 :它像桌面上的魅力,但有移动设备上的事件映射问题(我没有尝试在iOS上,但问题发生在Android Web视图)。 事件映射不缩放。 canvas被缩小,但不可能与canvas元素交互。 如果一个canvas元素(贴纸)位于x:100 y:100,当我将缩放属性设置为0.5时,该元素将位于(50,50),不再在(100,100)。 有没有什么办法可以根据android webview的缩放属性更正事件映射? 我不知道是否有其他的方法来做到这一点,但我被困在这个问题3天,我花了很多时间在论坛,fabricjs文档和谷歌,我没有find任何工作的解决scheme或别的东西可以帮助我。 编辑: 下面有2个工作解决scheme。 检查我的答案,看看如何用CSS来做到这一点。

如何从phonegap插件获取android服务返回消息

我正在尝试为PhoneGap(Android)制作一个插件,它允许我的JavaScript发送和接收来自服务的消息。 我确切的问题是,因为消息返回asynchronous,我不能发送PluginResult插件的执行function。 这是插件代码: public class ServiceClient_plugin extends Plugin { Messenger messenger_service=null; boolean connected_to_service=false; final Messenger messenger_receive = new Messenger(new IncomingHandler()); @Override public PluginResult execute(String action, JSONArray data, String callbackId) { PluginResult result = null; try { if (action.toUpperCase().equals("CONNECT")) { result = ConnectService(); } else if (action.toUpperCase().equals("DISCONNECT")) { result = DisconnectService(); } else if (action.toUpperCase().equals("IS_CONNECTED")) { […]