【单页源码推荐】【微星佣金修复源码】【类似chm网站源码】源码可以定位吗
1.å¦ä½å©ç¨Androidç¼ç¨å®ç°GPSå®ä½
2.源码有什么用
3.在网页的源码源代码中,怎么查看的可定代码是什么?
4.uni-app实现定位功能
5.怎么打开网页源代码
6.何为SourceMap?讲讲SourceMap食用姿势
å¦ä½å©ç¨Androidç¼ç¨å®ç°GPSå®ä½
æ¨å¥½ï¼å¾é«å ´ä¸ºæ¨è§£çãä¸ãåå¤å·¥ä½
éè¦å¦ä¸ä¸ç§è½¯ä»¶ï¼
1. Eclipse
2. Android SDK
3. å¼åAndroidç¨åºçEclipse æ件
为äºå¼å§æ们çå·¥ä½ï¼é¦å è¦å®è£ Eclipseï¼ç¶åä»Googleçç½ç«è·å¾Android SDKï¼å¹¶ä¸å®è£ Eclipseæ件ã
äºãActivityç±»
æ¯ä¸ç§ç§»å¨å¼åç¯å¢é½æèªå·±çåºç±»ãå¦J2MEåºç¨ç¨åºçåºç±»æ¯midletsï¼BREWçåºç±»æ¯appletsï¼èAndroidç¨åºçåºç±»æ¯ Activityãè¿ä¸ªactivity为æ们æä¾äºå¯¹ç§»å¨æä½ç³»ç»çåºæ¬åè½åäºä»¶ç访é®ãè¿ä¸ªç±»å å«äºåºæ¬çæé æ¹æ³ï¼é®çå¤çï¼æèµ·æ¥æ¢å¤åè½ï¼ä»¥ åå ¶ä»åºå±çææ设å¤ç访é®ãå®è´¨ä¸ï¼æ们çåºç¨ç¨åºå°æ¯ä¸ä¸ªActivityç±»çæ©å±ãå¨æ¬æä¸è¯»è å°ä¼éè¿ä¾åå¦ä¹ å°å¦ä½ä½¿ç¨Activityç±»æ¥ç¼ åAndroidç¨åºãä¸é¢æ¯ä¸ä¸ªç®åç继æ¿Activityçä¾åã
public class LocateMe extends Activity{public void onCreate(Bundle params){
super.onCreate(params);
setContentView(R.layout.main);
}
public boolean onKeyDown(int keyCode, KeyEvent event){
return true;
}
}
ä¸ Viewç±»
Viewç±»æ¯Androidçä¸ä¸ªè¶ ç±»ï¼è¿ä¸ªç±»å ä¹å å«äºææçå±å¹ç±»åãä½å®ä»¬ä¹é´æä¸äºä¸åãæ¯ä¸ä¸ªviewé½æä¸ä¸ªç¨äºç»ç»çç»å¸ãè¿ä¸ªç»å¸å¯ä»¥ç¨ æ¥è¿è¡ä»»ææ©å±ãæ¬æ为äºæ¹ä¾¿èµ·è§ï¼åªæ¶åå°äºä¸¤ä¸ªä¸»è¦çViewç±»åï¼å®ä¹ViewåAndroidçXMLå 容Viewãå¨ä¸é¢ç代ç ä¸ï¼ä½¿ç¨çæ¯ âHello Worldâ XML Viewï¼å®æ¯ä»¥é常èªç¶çæ¹å¼å¼å§çã
å¦ææ们æ¥çä¸ä¸æ°çAndroidå·¥ç¨ï¼å°±ä¼åç°ä¸ä¸ªå«main.xmlçæ件ãå¨è¿ä¸ªæ件ä¸ï¼éè¿ä¸ä¸ªç®åçXMLæ件ï¼æè¿°äºä¸ä¸ªå±å¹çå¸å±ãè¿ä¸ª ç®åçxmlæ件çå 容å¦ä¸ï¼
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"
androidrientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHoriz
android:text="ress the center key to locate yourself"
/>
</RelativeLayout>
ä¸é¢çå 容çåè½çèµ·æ¥é常ææ¾ãè¿ä¸ªç¹æ®æ件å®ä¹äºä¸ä¸ªç¸å ³çå¸å±ï¼è¿å°±æå³çéè¿ä¸ä¸ªå ç´ å°å¦ä¸ä¸ªå ç´ çå ³ç³»ææ¯å®ä»¬ç¶å ç´ çå ³ç³»æ¥æè¿°ã对äºè§å¾æ¥ 说ï¼æä¸äºç¨äºå¸å±çæ¹æ³ï¼ä½æ¯å¨æ¬æä¸åªå ³æ³¨äºä¸è¿°çxmlæ件ã
RealtiveLayoutä¸å å«äºä¸ä¸ªå¡«å æ´ä¸ªå±å¹çææ¬æ¡ï¼ä¹å°±æ¯æ们çLocateMe activityï¼ãè¿ä¸ªLocateMe activityå¨é»è®¤æ åµä¸æ¯å ¨å±çï¼å æ¤ï¼ææ¬æ¡å°ç»§æ¿è¿ä¸ªå±æ§ï¼å¹¶ä¸ææ¬æ¡å°å¨å±å¹çå·¦ä¸è§æ¾ç¤ºãå¦å¤ï¼å¿ 须为è¿ä¸ªXMLæ件设置ä¸ä¸ªå¼ç¨æ°ï¼ä»¥ä¾¿ Androidå¯ä»¥å¨æºä»£ç ä¸æ¾å°å®ãå¨é»è®¤æ åµä¸ï¼è¿äºå¼ç¨æ°è¢«ä¿åå¨R.javaä¸ï¼ä»£ç å¦ä¸ï¼
public final class R{public static final class layout{
public static final int main=0x7f;
}
}
è§å¾ä¹å¯ä»¥è¢«åµå¥ï¼ä½åJ2MEä¸åï¼æ们å¯ä»¥å°å®å¶çè§å¾åAndroidå¢éåå¸çWidgetsä¸èµ·ä½¿ç¨ãå¨J2MEä¸ï¼å¼å人å被迫éæ© GameCanvasåJ2MEåºç¨ç¨åºç»å¸ãè¿å°±æå³çå¦ææ们æ³è¦ä¸ä¸ªå®å¶çææï¼å°±å¿ é¡»å¨GameCanvasä¸éæ°è®¾è®¡æ们ææçwidgetã Androidè¿ä¸ä» ä» æ¯è¿äºï¼è§å¾ç±»åä¹å¯ä»¥æ··å使ç¨ãAndroidè¿å¸¦äºä¸ä¸ª widgetåºï¼è¿ä¸ªç±»åºå æ¬äºæ»å¨æ¡ï¼ææ¬å®ä½ï¼è¿åº¦æ¡ä»¥åå ¶ä»å¾å¤æ§ä»¶ãè¿äºæ åçwidgetå¯ä»¥è¢«éè½½æ被æçæ们çä¹ æ¯å®å¶ãç°å¨è®©æ们æ¥è¿å ¥ æ们çä¾åã
åãAndroidå®ä¾
è¿ä¸ªæ¼ç¤ºåºç¨ç¨åºå°æ¼ç¤ºäºç¨æ·çå½åçç»åº¦å纬度ï¼å¨ææ¬æ¡ä¸æ¾ç¤ºï¼ãonCreateæé æ¹æ³å°åä¸é¢çä¾ååºæ¬ç¸åï¼é¤äºå¨å ¶ä¸å å ¥äºé®çå¤çï¼ç°å¨ 让æ们çä¸ä¸onKeyDownç代ç ã
public boolean onKeyDown(int keyCode, KeyEvent event){if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading)
{
return true;
}
m_bLoading = true;
getLocation();
return true;
}
ä¸é¢è®©æ们æ¥è§£éä¸ä¸è¿æ®µä»£ç ï¼é¦å ï¼è¿æ®µä»£ç æ£æ¥äºå½å被æä¸çé®ï¼ä½è¿æ²¡æå¼å§å¤çãèæ¯å¨getLocationæ¹æ³ä¸å¤çè¿ä¸åçãç¶åï¼å°è£ è½½ flagæ å¿ä»¥åè°ç¨getLocationæ¹æ³ï¼ä¸é¢æ¯getLocationæ¹æ³ç代ç ã
private void getLocation(){Location loc;
LocationManager locMan;
LocationProvider locPro;
List<LocationProvider> proList;
setContentView(R.layout.laoding);
locMan = (LocationManager) getSystemService(LOCATION_SERVICE);
proList = locMan.getProviders();
locPro = proList.get(0);
loc = locMan.getCurrentLocation(locPro.getName());
Lat = (float)loc.getLatitude();
Lon = (float)loc.getLongitude();
CreateView();
setContentView(customView);
}
å°è¿ä¸ºæ¢ï¼ç¨åºå¼å§åå¾æ´æ趣äºãä½æ¯ä¸å¹¸çæ¯ï¼Googleå ³äºä¹æ¹é¢çææ¡£è¿æ¯æ¯è¾å°äºãå¨ç¨åºçåé声æä¹åï¼æ们éè¦æ¼ç¤ºä¸äºè£ 载信æ¯ã R.layout.loading符åäºå¦ä¸ä¸ªç®åçXMLå¸å±è§å¾ãéè¿ç®åå°è°ç¨setContentViewæ¹æ³å¯ä»¥ä½¿ç¨è½¬è½½ä¿¡æ¯éç»å±å¹ã
读è è¦æ³¨æçæ¯ï¼å¨ç¼è¯æ¶ï¼Androidä¼é¢å å°ææçXMLå¸å±æ°æ®å è£ èµ·æ¥ãå¦ææ们æ³å¨ç¼è¯åååå¸å±å±æ§ï¼æçè§å®ï¼æä»¬å¿ é¡»å¨æºç¨åºä¸åè¿äº äºã
è·å¾LocationManagerçå¯ä¸æ¹æ³æ¯éè¿getSystemService()æ¹æ³çè°ç¨ãéè¿ä½¿ç¨LocationManagerï¼ æ们å¯ä»¥è·å¾ä¸ä¸ªä½ç½®æä¾è çå表ãå¨ä¸ä¸ªçå®çææ设å¤ä¸ï¼è¿ä¸ªå表å å«äºä¸äºGPSæå¡ãå®é ä¸ï¼æ们å¸æéæ©æ´å¼ºå¤§ï¼æ´ç²¾ç¡®ï¼æåä¸å¸¦æå ¶ä»éå æ å¡çGPSãç°å¨ï¼å¨æ¨¡æå¨ä¸æä¾äºä¸ä¸ªç¨äºæµè¯çGPSï¼è¿ä¸ªGPSæ¥èªSan Franciscoãå®å¶çGPSæ件å¯ä»¥å¯ä»¥è¢«ä¸ä¼ ï¼å¹¶è¿è¡æµè¯ãå¦ææ们è¦æµè¯æ´å¤æçåºç¨ï¼æ¥èªSan FranciscoçGPSå¯è½å¹¶ä¸éåã
ç®åæ们å¯ä»¥ä½¿ç¨ä½ç½®ç®¡çå¨åä½ç½®æä¾è è¿è¡getCurrentLocationçè°ç¨ãè¿ä¸ªæ¹æ³è¿åæ¬æºçå½åä½ç½®çä¸ä¸ªå¿«ç §ï¼è¿ä¸ªå¿«ç §å°ä»¥ Location对象形å¼æä¾ãå¨ææ设å¤ä¸ï¼æ们å¯ä»¥è·å¾å½åä½ç½®çç»åº¦å纬度ãç°å¨ï¼ä½¿ç¨è¿ä¸ªèæçææ设å¤ï¼æ们å¯ä»¥è·å¾è¿ä¸ªä¾åç¨åºçæç»ç»æï¼ å»ºç«äºæ¾ç¤ºä¸ä¸ªå®å¶çè§å¾ã
äºã使ç¨å®å¶è§å¾
å¨æç®åççªä½ä¸ï¼ä¸ä¸ªAndroidä¸çè§å¾ä» ä» éè¦éè½½ä¸ä¸ªonDrawæ¹æ³ãå®å¶è§å¾å¯ä»¥æ¯å¤æç3Då®ç°ææ¯é常ç®åçææ¬å½¢å¼ãä¸é¢ç CreateViewæ¹æ³ååºäºä¸é¢çå°çå 容ã
public void CreateView(){customView = new CustomView(this);
}
è¿ä¸ªæ¹æ³ç®åå°è°ç¨äºCustomView对象çæé æ¹æ³ãCustomViewç±»çå®ä¹å¦ä¸ï¼
public class CustomView extends View{LocateMe overlord;
public CustomView(LocateMe pCtx){
super(pCtx);
overlord = pCtx;
}
public void onDraw(Canvas cvs){
Paint p = new Paint();
String sLat = "Latitude: " + overlord.getLat();
String sLon = "Longitude: " + overlord.getLon();
cvs.drawText(sLat , , , p);
cvs.drawText(sLon, , , p);
}
}
è¿ä¸ªå®å¶çAndroidè§å¾è·å¾äºç»åº¦åè¿åº¦çæµè¯æ°æ®ï¼å¹¶å°è¿äºæ°æ®æ¾ç¤ºå¨å±å¹ä¸ãè¿è¦æ±ä¸ä¸ªæåLocateMeçæéï¼Activityç±»æ¯æ´ 个åºç¨ç¨åºçæ ¸å¿ãå®ç两个æ¹æ³æ¯æé æ¹æ³åonDrawæ¹æ³ãè¿ä¸ªæé æ¹æ³è°ç¨äºè¶ ç±»çæé æ¹æ³ä»¥åå¼èµ·äºActivityæéçä¸æãonDrawæ¹ æ³å°å»ºç«ä¸ä¸ªæ°çPaint对象ï¼è¿ä¸ªå¯¹è±¡å°è£ äºé¢è²ãéæ度以åå ¶ä»ç主é¢ä¿¡æ¯ï¼ï¼è¿ä¸ªå¯¹è±¡å°ä¼è®¿é®é¢è²ä¸»é¢ãå¨æ¬ç¨åºä¸ï¼å®è£ äºç¨äºæ¾ç¤ºçå符串ï¼å¹¶ 使ç¨ç»å¸æéå°å®ä»¬ç»å°å±å¹ä¸ãè¿ä¸ªåæ们äºè§£çJ2ME游æçç»å¸çèµ·æ¥é常类似ã
å ãAndroidå±æ
ä»çº¯ç²¹çå¼åè§ç¹çï¼Androidæ¯ä¸ä¸ªé常强大çSDKãå®ä½¿ç¨åºäºXMLçå¸å±åå®å¶è§å¾èåäºèµ·æ¥ã并å¯ä»¥ä½¿ç¨æ»å¨æ¡ãå°å¾ä»¥åå ¶ä»çç»ä»¶ãæ以 çè¿ä¸åé½å¯ä»¥è¢«éè½½ï¼æç±å¼å人åæ¥å®å¶ãä½å®ææä¾çææ¡£é常ç²ç³ãå¨ææ¡£ä¸å¹¶æ²¡æ象SMSçææ¯ï¼ä½æ¯ä»æ´ä½ä¸æ¥çAndroid SDKï¼è¿æ¯é常æå¸æçãä¹é常符åGoogleæ¿è¯ºçâFirst LookâSDKãç°å¨æ们è¦åçå°±æ¯çå¾ Googleåå¸ç¬¬ä¸ä¸ªåºäºAndroidçææºï¼å¹¶ä½¿ç¨å®ã
å¦è¥æ»¡æï¼è¯·ç¹å»å³ä¾§ãé纳çæ¡ãï¼å¦è¥è¿æé®é¢ï¼è¯·ç¹å»ã追é®ã
å¸ææçåç对æ¨ææ帮å©ï¼æé纳ï¼
~ O(â©_â©)O~
源码有什么用
源码的用途与重要性源码是一种原始的计算机程序代码,广泛应用于软件的源码开发和维护过程。其重要性在于它为软件开发者和维护者提供了一个明确、可定可读的源码程序逻辑框架,有助于理解软件的可定单页源码推荐功能和操作方式。以下是源码关于源码作用的详细解释:
一、实现软件功能与开发流程
源码是可定软件程序的基石。通过编写和修改源码,源码开发者能够实现软件的可定各项功能,并完成软件开发的源码全过程。源码包括了程序的可定逻辑结构、数据处理方式、源码运行规则等重要信息,可定是源码软件项目从设计到实现的关键环节。
二、调试与修复软件问题
在软件运行过程中,可能会出现各种问题和错误。源码为开发者提供了调试和修复这些问题的手段。通过查看和分析源码,开发者可以定位问题所在,进而通过修改源码来修复问题,保证软件的正常运行。
三、软件优化与性能提升
源码的修改和优化可以帮助提升软件的性能。开发者可以通过对源码的微星佣金修复源码分析,找到软件运行的瓶颈,然后通过优化源码来提升软件的运行效率。此外,源码的灵活性也使得开发者可以根据不同的运行环境或用户需求,对软件进行针对性的优化。
四、学习与教育价值
源码对于学习和教育具有重要意义。通过学习源码,开发者可以了解不同软件的设计思路、实现方法和技术细节,从而提升自身的编程技能。同时,源码也是教学的重要资源,教育者可以通过对源码的讲解和分析,帮助学生更好地理解编程知识和技术。
总之,源码是软件开发和维护过程中不可或缺的一部分。它不仅实现了软件的各项功能,还为解决软件问题、优化性能和提升运行效率提供了可能。同时,源码的学习和研究对于提升个人技能和推动编程教育也具有重要意义。
在网页的源代码中,怎么查看的代码是什么?
在网页的源代码中,查看的类似chm网站源码代码的方式是:F打开,测试工具,左边有鼠标 (或者CTR +B)点击,想看上点击下,能定位段代码。代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。 源代码是代码的分支,某种意义上来说,源代码相当于代码。
现代程序语言中,源代码可以书籍或磁带形式出现,但最为常用格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码最终目的是将人类可读文本翻译成为计算机可执行的二进制指令,这种过程叫编译,它由通过编译器完成。
uni-app实现定位功能
uni-app实现定位功能的步骤如下:
首先,获取用户地理位置权限。使用uni-app内置的anaconda 安装源码包authorize方法,请求用户授权。在manifest.json文件中,点击"源码视图",在mp-weixin配置部分添加相关配置代码。
接下来,确保在app.json文件中也配置好权限请求。运行项目到微信开发者工具,再次配置相关代码。在authorize方法中,设置scope参数为userLocation,以请求获取位置信息。若用户拒绝授权,提示他们访问小程序设置页面。
在实际使用前,要检查是否已获取到定位权限。如果未授权,应适时提示用户并请求授权。
若需实现精准定位,可以借助腾讯地图。首先,注册腾讯地图开发者,获取key并下载qqmap-wx-jssdk.min.js。然后,在该文件末尾替换相关代码,并将SDK文件放入libs文件夹。蝴蝶影视源码搭建创建腾讯地图对象后,调用逆地址解析方法获取位置信息。
对于常见问题,解决方案包括:
- 如果微信小程序定位出错,检查manifest.json的配置,确保已添加正确的权限代码,并在app.json中同步配置。然后,重新编译项目并启动,uni.getLocation方法应该能正常返回经纬度。此外,务必确认AppID已正确配置,可在manifest.json的"微信小程序配置"部分查看。
怎么打开网页源代码
打开网页源代码的方法很简单,通常可以通过浏览器的开发者工具来实现。
在大多数现代浏览器中,如Chrome、Firefox、Safari或Edge,你都可以通过以下步骤打开网页的源代码:
1. 首先,打开你想要查看源代码的网页。
2. 接着,在浏览器中按下快捷键。在Windows系统中,通常是F键或者Ctrl+Shift+I;在Mac系统中,通常是Cmd+Opt+I。这些快捷键会打开浏览器的开发者工具面板。
3. 在开发者工具面板中,你通常会看到一个名为“Elements”或“源代码”的标签页。点击这个标签页,你就可以看到当前网页的HTML源代码了。
此外,有些浏览器还提供了右键菜单的方式来查看网页源代码。例如,在Chrome浏览器中,你可以在页面上右键点击,然后选择“检查”或“审查元素”选项,这也会打开开发者工具面板并定位到源代码部分。
查看网页源代码可以帮助你了解网页的结构和内容,包括HTML标签、CSS样式和JavaScript脚本等。这对于前端开发者来说是非常有用的,可以帮助他们学习和理解网页的设计和实现方式。同时,对于普通用户来说,也可以通过查看源代码来了解网页的基本结构和功能。
需要注意的是,网页的源代码只是网页的静态表示,它并不包含网页在浏览器中运行时所有的动态内容和交互效果。因此,即使你能够查看和修改源代码,也不一定能完全理解网页的所有功能和行为。
何为SourceMap?讲讲SourceMap食用姿势
做好事不留名的 sourcemap
当我们在开发代码时,遇到错误时,可以在控制台定位到具体的问题。然而,由于打包动作会使原始代码进行编译、压缩,最终在产物中已不再可见原始代码。打开产物,我们仅能见到经过打包后的代码。
既然如此,为什么我们仍然可以通过控制台,在原始代码中定位到错误位置呢?答案在于 source map。在前端工程体系中,代码从开发到上线,大多需要经过打包编译的步骤。为了追踪代码,source map 的作用便显现出来。
经过打包编译,代码变得面目全非,原始信息丢失,遇到错误时难以定位。然而,如果打包产物中有 source map 文件,我们便能利用这些文件还原出原始代码。source map 是如何生成的,以及我们应如何使用它呢?
sourcemap 原理与构成
为了清晰描述 sourcemap 的生成,我们用一个简单的 case 来编译并生成 sourcemap。利用 babel 将代码转为 es5 的同时,可以得到一份 sourcemap。这份 sourcemap 包含多个属性,分别代表着原始代码和编译后代码的映射关系。其中最重要的属性是 mappings 字段,记录着原始代码与编译后代码的映射关系。
映射是如何记录的?
设计 sourcemap 时,可以将编译后的每一个单词对应的原始位置记录下来。需要考虑的是,存在多个文件编译成一个文件的情况,因此需要记录原始文件名。接下来,我们简述 sourcemap 的生成方式。
优化与编码
通过逐层优化,可以实现更高效的编码。例如,省去输出文件中的行号,改用 ; 来标识换行。利用索引标识变量名,使用索引代替文件名,并采用相对位置代替绝对位置。在二进制编码中使用 VLQ 编码,减少字符的使用。
VLQ 编码原理
VLQ 编码使用 6 个字节比特记录一个数字,其中一个字节标识是否结束,一位标识正负,剩下四位表示数值。通过 VLQ 编码,我们可以节省大量字符。以 mappings 的第二项为例,最终编码为 IAAMA。
合并与使用
理论上,每一次编译过程都可以生成 sourcemap,最终需合并以得到生产环境代码到开发环境代码的 sourcemap。可以使用现有的轮子手动实现合并,但更方便的是利用 webpack 这类打包工具提供的 sourcemap 功能。在 webpack 配置中,使用 devtool 属性标识生成何种类型的 sourcemap。
不同 sourcemap 模式
不同的 sourcemap 模式适用于不同场景。source-map 模式生成独立的.map 文件,是最详细但耗时的模式。inline 模式不会生成独立文件,而是用 base 编码将 sourcemap 编入代码末尾。eval 模式不生成 sourceMap 信息,只用 sourceURL 存储原始文件位置。eval-source-map 模式与 eval 相似,但同时生成 sourceMap 信息。
cheap-source-map 和 cheap-module-source-map 模式仅记录行信息,便宜但信息有限。nosources 模式生成不包含 sourcecontent 的 sourcemap,隐藏错误堆栈信息。hidden 模式生成 sourcemap,但不将 sourcemapURL 信息附着在代码中。
开发与生产环境选择
在开发环境下,使用构建速度快、可以看到原始信息的 eval-source-map 模式。在生产环境下,为了不泄露源代码,使用 hidden-source-map 模式。
sourcemap 准确性问题
有时 sourcemap 可能表现不准。一种可能的原因是 webpack 的 hot server 使用了错误的 sourcemap 模式,导致定位不准。更换 sourcemap 模式为 cheap-module-source-map 或 source-map 可能解决问题。同时,打包过程的某个环节丢失原始信息,也可能导致 sourcemap 定位不准。