<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>haocity</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://haotown.cn/</id>
  <link href="https://haotown.cn/" rel="alternate"/>
  <link href="https://haotown.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, haocity</rights>
  <subtitle>欢迎来的我的博客,haotown</subtitle>
  <title>HAOTOWN-疯狂减肥带</title>
  <updated>2026-11-02T03:30:00.000Z</updated>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>家里这台电视是 2020 年前后的海尔 LUC65C51，型号名 <code>yunostv_homeshell</code>，Android 5.1.1，32 位，出厂桌面是带开机广告和推荐位的泰坦桌面（YUNOS）。</p><p>我想换掉它，理由很朴素：开机先看广告，首页推的全是我不看的东西。</p><p>正常 Android 电视换启动器，进设置挑一个就完事。这台电视折腾了我好久，最后发现卡住所有人的不是权限，是一颗键到底发了什么。</p><span id="more"></span><h2 id="一、设置里翻遍了，没有“桌面”这一项"><a href="#一、设置里翻遍了，没有“桌面”这一项" class="headerlink" title="一、设置里翻遍了，没有“桌面”这一项"></a>一、设置里翻遍了，没有“桌面”这一项</h2><p>我先是按最省事的思路来：设置里找“默认桌面”。翻了两遍，没有这一项，桌面相关的入口一个都没留，系统设置被砍得很干净。</p><p>那就走 adb。先按下信源按钮，进入信源选择界面<br><img src="https://pic1.imgdb.cn/i/034qNkgTnGL1wKm2tFnMwh.jpg" alt="信源选择"><br>在这个界面依次按下遥控器的方向键 左-左-上-右，即可打开工厂菜单。<br>在菜单中打开ADB调试开关即可。然后 查看电视的网络信息拿到IP就可以远程链接了。<br><code>adb connect 192.168.8.11:5555</code> 连得上，执行<code>dumpsys</code>、<code>pm list packages</code> 这类只读命令也都正常，看着挺顺利。</p><p>装第三方启动器也没什么用，装几个都是同一个结局：按主页键，画面闪一下，又回到那个满是推荐位的泰坦桌面。</p><h2 id="二、先让它闭嘴：CleanYourTV-折了"><a href="#二、先让它闭嘴：CleanYourTV-折了" class="headerlink" title="二、先让它闭嘴：CleanYourTV 折了"></a>二、先让它闭嘴：CleanYourTV 折了</h2><p>换桌面一时半会儿没戏，我决定先把广告干掉。</p><p>第一个正经尝试是 CleanYourTV 这类开源精简脚本。它们维护了一份国产电视可安全停用的系统应用清单，按厂商分好类，思路也不复杂：adb 连上电视，把清单里的包批量 <code>pm disable</code> 或者 <code>pm uninstall --user 0</code>。</p><p>脚本在我电脑上跑得很顺。连得上 <code>192.168.8.11:5555</code>，读得到这台机器的一百多个包，也认得海尔的条目。看它把广告和预装应用一条条列出来的时候，我一度以为很快就能收工。</p><p>然后进了执行阶段：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">pm disable-user --user 0 com.alira.info</span><br><span class="line">→ SecurityException: Permission Denial</span><br><span class="line"></span><br><span class="line">pm disable-user --user 0 com.yunos.advert.service</span><br><span class="line">→ SecurityException: Permission Denial</span><br></pre></td></tr></table></figure><p>一行一个，从上刷到底，一个没成。</p><p>报错的意思很明确：shell 改不了组件状态，整条路都是堵的，不是个别包受保护。CleanYourTV 的文档里把这种机型归到“无法通过 adb 精简”那一类，我原以为那是免责声明，看来是别人的实测结论。</p><p>既然 adb 不行，就换个思路，找自带系统权限的工具，让它在电视上动手，不经过 shell。网上翻到一个<strong>「海尔冻结应用」</strong>（<code>com.haier.freezeapp</code>），它用的是系统签名，在图形界面里就能停用应用，压根不经过 adb，自然也就绕开了 uid 2000 这道墙。</p><p>效果立竿见影。开机广告没了，桌面推荐位不弹了，后台那些进程也不再上报。整个过程不卸载、不 root，在「冻结应用」里点一下就解冻，随时能退回去。</p><p>但泰坦桌面还在，主页键照样往它身上跳，广告清干净了，问题一点没解决。</p><p>（清单里第 15 项 <code>com.youku.taitan.tv</code> 就是泰坦桌面本身。想彻底断根可以把它也冻掉，但要先把新桌面顶上来，否则按主页键会“没人接”，电视看起来像死机。）</p><h2 id="三、那颗键到底发了什么"><a href="#三、那颗键到底发了什么" class="headerlink" title="三、那颗键到底发了什么"></a>三、那颗键到底发了什么</h2><p>真正把问题说清楚的是日志。装好第三方启动器之后按一次主页键，然后马上把活动栈倒出来看：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb shell dumpsys activity activities</span><br></pre></td></tr></table></figure><p>里面有一条是这样的：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Intent &#123; act=android.intent.action.VIEW</span><br><span class="line">         dat=yunostv_homeshell://start_home</span><br><span class="line">         cmp=com.youku.taitan.tv/com.youku.tv.home.activity.HomeActivity &#125;</span><br></pre></td></tr></table></figure><p>动作是 <code>ACTION_VIEW</code>，不是 <code>ACTION_MAIN</code>，数据部分也不是空的，是一个自家定义的 URI：<code>yunostv_homeshell://start_home</code>。</p><p>也就是说，这颗键根本没走系统那套“谁来当桌面”的机制。它拿这个 URI 去问 PackageManager 谁注册了这个 scheme，泰坦桌面是唯一答上来的，于是被拉起。</p><p>装多少启动器都没用，原因就在这里。它们声明的是 <code>CATEGORY_HOME</code>，而这台电视不查这一项。</p><p>反过来就是一个很具体的机会：只要有个启动器也注册了 <code>yunostv_homeshell</code>，它就能变成主页键的候选。不用求权限，也不用改默认值，这台电视压根没有“默认桌面”这个概念，只认谁响应这个协议。</p><h2 id="四、给启动器伪造一个身份"><a href="#四、给启动器伪造一个身份" class="headerlink" title="四、给启动器伪造一个身份"></a>四、给启动器伪造一个身份</h2><p>思路定了，接下来是脏活：改 APK。</p><p>工具是 Zulu OpenJDK 17.0.21 加 apktool 3.0.3，签名用 jarsigner 走 SHA-256 v1。Android 5.1 只认 v1，这点不能省。</p><p>要往 <code>AndroidManifest.xml</code> 的主 Activity 里塞的，就这一段：</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">intent-filter</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">action</span> <span class="attr">android:name</span>=<span class="string">&quot;android.intent.action.VIEW&quot;</span>/&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">category</span> <span class="attr">android:name</span>=<span class="string">&quot;android.intent.category.DEFAULT&quot;</span>/&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">data</span> <span class="attr">android:scheme</span>=<span class="string">&quot;yunostv_homeshell&quot;</span> <span class="attr">android:host</span>=<span class="string">&quot;start_home&quot;</span>/&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">intent-filter</span>&gt;</span></span><br></pre></td></tr></table></figure><p><code>CATEGORY_DEFAULT</code> 不能漏，隐式意图靠它匹配，漏了就等不到那颗键。</p><p>然后重打包、签名、卸载旧版、装新版。签名换了跟原包对不上，必须先卸干净，这一步会丢数据，要留的配置提前记下来。</p><h2 id="五、选择框弹出来的那一秒"><a href="#五、选择框弹出来的那一秒" class="headerlink" title="五、选择框弹出来的那一秒"></a>五、选择框弹出来的那一秒</h2><p>第一个试验品是 FLauncher，Flutter 写的，代码简单，包也小。</p><p>装完，按主页键。</p><p>屏幕中间真的弹出了「打开方式」，两个候选并排：FLauncher 和泰坦桌面。</p><p><em>[图待补：FLauncher 与泰坦桌面的「打开方式」选择框]</em></p><p>折腾了几天，头一次觉得这电视算是能自己做主了。再手动触发一次 <code>yunostv_homeshell://start_home</code>，也能直达 FLauncher，协议这条路是通的。</p><p>不过高兴没持续多久。</p><h2 id="六、每次都要选，这才是真正的问题"><a href="#六、每次都要选，这才是真正的问题" class="headerlink" title="六、每次都要选，这才是真正的问题"></a>六、每次都要选，这才是真正的问题</h2><p>这台电视的「打开方式」框，<strong>没有「始终」这个按钮</strong>。我用 adb 试着把默认项写死，也写不进去。</p><p>结果就是每次按主页键都得拿遥控器再选一次。开始还没觉得麻烦，一天按十几次就受不了了：开机要选，退到桌面要选，看完视频回首页也要选。</p><p>缺的不是“默认桌面设置”，是有人盯着前台，厂商桌面一冒头就切走。</p><p>无障碍服务能做这件事，监听 <code>TYPE_WINDOW_STATE_CHANGED</code>，一看前台是泰坦桌面就切走。只是我手上没有合适的启动器，FLauncher 没这个能力。</p><h2 id="七、换成-Aerial"><a href="#七、换成-Aerial" class="headerlink" title="七、换成 Aerial"></a>七、换成 Aerial</h2><p>顺着这个需求找到 Aerial（<code>pengchujin/aerial-tv</code>，<code>app.orchard.tv</code>）：tvOS 风格的界面，底部应用货架，苹果航拍素材做的屏保，控制中心，无广告。最关键的是它自带一个叫「Aerial 桌面守护」的无障碍服务，做的正是这件事。</p><p>它要求最低 Android 5.0，这台 5.1.1 刚好够。拆开看了下，<code>minSdkVersion: 21</code>，带 <code>armeabi-v7a</code> 的 32 位库，版本 1.56，都对得上。</p><p>改法和之前一样，只往 manifest 里加了那个 intent-filter，dex 和资源没动，功能跟官方原版一致，只是多了个能被这颗键认出来的身份。</p><h2 id="八、它自己把守护打开了"><a href="#八、它自己把守护打开了" class="headerlink" title="八、它自己把守护打开了"></a>八、它自己把守护打开了</h2><p>装完 Aerial 要过一遍授权，我照着官方脚本逐条跑，结果一半顺利一半报错。</p><p><code>pm grant</code> 那几条基本都过了，<code>WRITE_SECURE_SETTINGS</code>、<code>SYSTEM_ALERT_WINDOW</code>、<code>WRITE_SETTINGS</code> 都没问题。下面两条连着报错：<code>cmd notification allow_listener</code> 直接 <code>cmd: not found</code>，5.1 那个年代还没有 <code>cmd</code> 这个命令；<code>settings put secure enabled_accessibility_services</code> 被拒，因为 shell 没有写 secure settings 的权限。</p><p>第二条报错的时候我以为完了。无障碍服务开不起来，守护就是空的，前面那些等于白做。</p><p>后来发现第一行就是答案：权限是发给 App 的，不是给 shell 自己用的。Aerial 带着 <code>WRITE_SECURE_SETTINGS</code> 启动，起来之后自己把守护开了，不需要我用 adb 硬塞。</p><p>查了一下：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb shell dumpsys accessibility</span><br></pre></td></tr></table></figure><p>输出里有这么一段：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">services:&#123;Service[label=Aerial 桌面守护, feedbackType[FEEDBACK_GENERIC],</span><br><span class="line">capabilities=8, eventTypes=TYPE_WINDOW_STATE_CHANGED, ...]]&#125;</span><br></pre></td></tr></table></figure><p>看到这行就放心了。</p><p>顺手还发了两个配置广播，都回了 <code>result=0</code>：一个 <code>keep_adb true</code>，让 ADB 常开（这台电视开发者选项里没有“常开”开关，休眠就掉线，每次都要重新进设置点一遍，很烦）；一个 <code>own_screensaver true</code>，把屏保也接管过来。</p><p>启动 Aerial，先是它的“设为主屏幕”引导页。走完就是正常桌面，控制中心里有音量、亮度、信号源、设置和个性化（但很遗憾 信号源功能无法支撑）。</p><h2 id="九、验收"><a href="#九、验收" class="headerlink" title="九、验收"></a>九、验收</h2><p>按官方文档的清单逐条跑了一遍，下面是真实返回，不修饰：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">#1  dumpsys package app.orchard.tv | grep versionName</span><br><span class="line">    versionName=1.56                                     ← 已安装 ✅</span><br><span class="line"></span><br><span class="line">#2  cmd package resolve-activity ... HOME</span><br><span class="line">    /system/bin/sh: cmd: not found                       ← 本机没有 cmd</span><br><span class="line">    （备用方案 pm resolve-activity 也是 Error: unknown command）</span><br><span class="line"></span><br><span class="line">#3  settings get secure enabled_accessibility_services</span><br><span class="line">    app.orchard.tv/app.orchard.tv.guard.HomeGuardService ← 守护已启用 ✅</span><br><span class="line"></span><br><span class="line">#4  dumpsys accessibility | grep -c -E &#x27;label=(Aerial|app.orchard.tv)&#x27;</span><br><span class="line">    1                                                    ← 守护在运行 ✅</span><br><span class="line"></span><br><span class="line">#5  input keyevent KEYCODE_HOME</span><br><span class="line">#6  sleep 3; dumpsys window | grep mCurrentFocus</span><br><span class="line">    android/com.android.internal.app.ResolverActivity    ← 弹出选择框</span><br></pre></td></tr></table></figure><p>按主页键，现在弹的是三选一：</p><p><img src="https://pic1.imgdb.cn/i/034qNvMuPBwk0Apa6hhRJq.png" alt="pasted_1793589619774_gbg0pf.png"></p><p>第 2 步和第 5、6 步说明两件事：没有 <code>cmd</code> 这个入口，选择框也不记选择。第 3、4 步说明守护在跑，这才是它能用的原因。</p><h2 id="十、写在最后"><a href="#十、写在最后" class="headerlink" title="十、写在最后"></a>十、写在最后</h2><p>用了一段时间，日常其实感知不到选择框的存在。系统起来之后会弹出一次选择框，按下Aerial后，再按下HOME按键会自动回到Aerial，日常使用没问题。</p><p>不完美，但一台 2020 年的、被厂商锁死的电视，能到这一步我已经挺满意了。</p><p>这事的钥匙不在“默认桌面”那个开关上，而在主页键到底发了什么 intent。海尔用的是 <code>yunostv_homeshell://start_home</code>，别的国产定制系统估计也有自己的一套。与其在设置里翻半天，不如按一下键，把 <code>dumpsys activity activities</code> 倒出来看看。</p><h2 id="附：留下的东西"><a href="#附：留下的东西" class="headerlink" title="附：留下的东西"></a>附：留下的东西</h2><p>改好、装到电视上的启动器（都加了 <code>yunostv_homeshell</code> 协议）：</p><table><thead><tr><th>文件</th><th>包名</th><th>说明</th></tr></thead><tbody><tr><td><code>aerial-homeshell.apk</code></td><td><code>app.orchard.tv</code></td><td>Aerial 1.56，当前主用</td></tr><tr><td><code>flauncher-homeshell.apk</code></td><td><code>me.efesser.flauncher</code></td><td>FLauncher，留作备用</td></tr></tbody></table><p>工具链是 Zulu JDK 17.0.21 加 apktool 3.0.3，签名走 jarsigner 的 v1 方案。</p><p>想撤销的话，<code>adb uninstall app.orchard.tv</code> 卸载掉就行，原桌面和系统都没动过；冻掉的那批应用在「冻结应用」里解冻即可恢复。</p><p>主要是没系统的签名文件，uid等级太低，root尝试了几个exp也没成功，也懒得继续折腾了，怕弄不好这东西又不好救砖。</p>]]>
    </content>
    <id>https://haotown.cn/archives/72.html</id>
    <link href="https://haotown.cn/archives/72.html"/>
    <published>2026-11-02T02:30:00.000Z</published>
    <summary>
      <![CDATA[<p>家里这台电视是 2020 年前后的海尔 LUC65C51，型号名 <code>yunostv_homeshell</code>，Android 5.1.1，32 位，出厂桌面是带开机广告和推荐位的泰坦桌面（YUNOS）。</p>
<p>我想换掉它，理由很朴素：开机先看广告，首页推的全是我不看的东西。</p>
<p>正常 Android 电视换启动器，进设置挑一个就完事。这台电视折腾了我好久，最后发现卡住所有人的不是权限，是一颗键到底发了什么。</p>]]>
    </summary>
    <title>主页键不走标准 HOME：给海尔 YunOS 电视换上 Aerial 桌面</title>
    <updated>2026-11-02T03:30:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>好久没风险博客了 这次手机被偷了 正好双11捡到了k30s 来水篇博文<br><strong>重要提醒 2020-12-28</strong>MIUI12.5已更新 Android版本11的系统无法通过此方法使用twrp（不支持11）</p><p><img src="https://pic.downk.cc/item/5fd089813ffa7d37b3f9a714.png" alt="机器包装"><br>双11 零点 京东 点击抢购 失败没有抢到 本来已经放弃购买 却没想到0:30又放了货 速下单 成功已2299的价格拿下<br>本以为快递会很慢 但惊喜的是不是本地仓但在当日18:30完成了配送 对京东的跨区域配送点个赞<br>外包装很厚 看到这里我有种不祥的预感<br>附送了清水套（戴上之后摄像头依然很突出） 33W充电器 极为高级type-c转3.5耳机线<br>我所购买的版本为月光银 第一眼看上去是银灰色 看模样中规中矩 唯一缺点就是摄像头太突出了<br><img src="https://pic.downk.cc/item/5fd08e6e3ffa7d37b3ff1398.jpg" alt="手机背面"><br>作为一名玩机党 那到小米手机第一步当然是解锁了 进入<a href="http://www.miui.com/unlock/index.html">http://www.miui.com/unlock/index.html</a> 下载解锁工具<br>手机进入设置-我的设备-全部参数  狂点miui版本 开启开发者模式<br>返回设置 打开更多设置 -开发者选项  点击 webview实现下面的 设备解锁状态<br><img src="https://pic.downk.cc/item/5fd08fde3ffa7d37b300889e.jpg" alt="设备解锁状态"><br>安装提示关掉wifi 需使用sim卡数据进行绑定(估计是防反wifi进行中间人攻击 来进行非法绑定）<br>绑定成功后  打开下载的解锁工具 关机后，同时按住开机键和音量下键 进入Bootloader模式 插入电脑 解锁开始<br>（这里建议使用原装线 随手抓的一条插电脑没反应）<br><img src="https://pic.downk.cc/item/5fd091a23ffa7d37b302cdba.png" alt="幸运女神不在了"><br>看来我的手机需要等待168h 记得原来老账号可以秒解的 可能是为了防止7天无理由期间解锁退货吧<br>毕竟现在可以解锁刷机的手机已经不多了</p><p>—————————7day————————–</p><p>七天后打开解锁工具进行了解锁 这里要注意下 解锁需要清空原来的数据 请注意备份</p><p>因为小米k30s当时还没放出官方的的开发版 那就决定直接弄magisk<br> 那么直接尝试刷入 wzsx150 大佬的适配的TWRP<br><a href="https://cloud.189.cn/t/uuIzymZZFbey">天翼云</a> （访问码：yzy9） 选择 红米K30S至尊纪念版-安卓10-下载名为<br>TWRP-xxxxx-REDMI_K30S_ULTRA-CN-wzsx150-fastboot.7z 的文件 解压7z压缩包<br>打开recovery-twrp一键刷入工具.bat 进入刷入程序<br><img src="https://pic.downk.cc/item/5fd096e83ffa7d37b3084081.png" alt="选择2"><br>这里手机关机后 同时按住开机键和音量下键 进入Bootloader模式  链接电脑 输入2选择fastboot模式回车<br>执行刷机程序 刷机解锁后会自动进入rec twrp<br><img src="https://pic.downk.cc/item/5fd098453ffa7d37b30a1088.jpg" alt="twrp"><br>此时 保持电脑链接<br>下载 <a href="https://cloud.189.cn/t/NnMVJreIFB7f%EF%BC%88%E8%AE%BF%E9%97%AE%E7%A0%81%EF%BC%9Aku0i%EF%BC%89">https://cloud.189.cn/t/NnMVJreIFB7f（访问码：ku0i）</a><br>Magisk+edxposed 包并解压获得三个压缩包 讲解压后的 Magisk-v21.0,Riru,Riru-EdXposed复制到手机中<br>点击手机上的安装 选择你复制的目录 先选择Magisk 进行刷入  有需要的可以依次刷入Riru和EdXposed 享受xposed的乐趣<br>刷入完成 进行重启 桌面就会出现Magisk 的图标 即为成功<br>如刷入了EdXposed 需下载<a href="https://cloud.189.cn/t/UBZn6bA3YNb2">EdXposed Manafer</a>（访问码：gft2） 进行管理xposed的插件</p><p>到此 安装完成<br><img src="https://pic.downk.cc/item/5fd09c1f3ffa7d37b30df6b8.jpg" alt="请输入图片描述"></p>]]>
    </content>
    <id>https://haotown.cn/archives/71.html</id>
    <link href="https://haotown.cn/archives/71.html"/>
    <published>2020-12-09T08:23:00.000Z</published>
    <summary>
      <![CDATA[<p>好久没风险博客了 这次手机被偷了 正好双11捡到了k30s 来水篇博文<br><strong>重要提醒 2020-12-28</strong>MIUI12.5已更新 Android版本11的系统无法通过此方法使用twrp（不支持11）</p>
<p><img src="ht]]>
    </summary>
    <title>红米k30s至尊版magisk root</title>
    <updated>2020-12-28T15:12:58.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="心情" scheme="https://haotown.cn/category/%E5%BF%83%E6%83%85/"/>
    <content>
      <![CDATA[<p>原icp备案号  鲁ICP备15029864号 以注销<br>使用新备案号  鲁ICP备18046940号</p>]]>
    </content>
    <id>https://haotown.cn/archives/70.html</id>
    <link href="https://haotown.cn/archives/70.html"/>
    <published>2018-10-29T02:09:22.000Z</published>
    <summary>
      <![CDATA[<p>原icp备案号  鲁ICP备15029864号 以注销<br>使用新备案号  鲁ICP备18046940号</p>]]>
    </summary>
    <title>网站备案通知</title>
    <updated>2018-10-29T02:09:22.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="心情" scheme="https://haotown.cn/category/%E5%BF%83%E6%83%85/"/>
    <content>
      <![CDATA[<p>各服务陆续恢复<br>这次被黑因为typecho的install.php漏洞<br>当时大意了  也知道有洞  不过就把install文件夹给改了个名  奈何是根目录下的install.php有洞</p><p>通过洞洞创建了个用于接收post上传文件的页面  然后疯狂请求  创建了N个垃圾菠菜页面<br>吓得我直接重装了<br>emmmm…</p>]]>
    </content>
    <id>https://haotown.cn/archives/69.html</id>
    <link href="https://haotown.cn/archives/69.html"/>
    <published>2018-06-21T12:35:00.000Z</published>
    <summary>
      <![CDATA[<p>各服务陆续恢复<br>这次被黑因为typecho的install.php漏洞<br>当时大意了  也知道有洞  不过就把install文件夹给改了个名  奈何是根目录下的install.php有洞</p>
<p>通过洞洞创建了个用于接收post上传文件的页面  然后疯狂请求]]>
    </summary>
    <title>博客被黑了</title>
    <updated>2018-07-06T06:53:32.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://haotown.cn/category/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<p>vue作为国产优秀开源项目已经火了很久 一直没太多时间去学习<br>首先 安装好node 配置好环境变量  这里我们直接使用官方的脚手架开发</p><pre><code>npm install vue-cli</code></pre><p>等待进度 </p><pre><code>vue init webpack 项目名</code></pre><p>然后填写各种信息 完成后 npm run dev 即可进入开发模式<br>首先处理下bable </p><pre><code>npm install --save-dev babel-preset-stage-0</code></pre><p>我这里兼容ES7使用了stage-0 它包含stage-1, stage-2以及stage-3的所有功能<br>env包含了babel-preset-es2015, babel-preset-es2016, and babel-preset-es2017<br>编辑.babelrc文件</p><pre><code>&quot;presets&quot;: [&quot;env&quot;,&quot;stage-0&quot;]</code></pre><p>完成进行保存 接下来关闭烦人 eslint 打开webpack.base.conf.js找到createLintingRule注释掉 eslint内容<br>接着 添加less的支持</p><pre><code>      &#123;        test: /\.less$/,        loader: &quot;style-loader!css-loader!less-loader&quot;,      &#125;</code></pre><p>这样在style标签里 使用**lang&#x3D;”less”**即可标注为less文件 自动进行编译<br>当然 也别忘了</p><pre><code>npm install less less-loader --save-dev</code></pre><p>接着 我们来看下文件结构 根目录下的index.html<br>这个其实就是入口文件  打开webpack.dev.conf.js就可以看见 webpack把进行编译好的js插入到页面之中</p><p>那么 插入的是谁呢？</p><p><code>entry: &#123;     app: &#39;./src/main.js&#39;   &#125;,</code><br>就是src中的main.js 我们来看看都是写了什么 </p><pre><code>import Vue from &#39;vue&#39;import App from &#39;./App&#39;import router from &#39;./router&#39;......new Vue(&#123;  el: &#39;#app&#39;,  router,  components: &#123; App &#125;,  template: &#39;&lt;App/&gt;&#39;&#125;)</code></pre><p>这里引用了VUE和APP和router<br>把APP（也就是APP.VUE 引用时候 vue可省略）定义为了一个template 也就是首页中的app标签将被替换为app.vue所包含内容</p><p>那router又是什么呢？ router就是router文件夹下面的index.js 里面包含了vue的路由信息<br>把文件单独出来有利于开发<br>现在我们来看vue文件</p><pre><code>&lt;template&gt;  ....&lt;/template&gt;&lt;script&gt;export default &#123;  name: &#39;App&#39;, data() &#123;  return &#123;    ....   &#125;&#125;&#125;&lt;/script&gt;&lt;style&gt;....&lt;/sty;e&gt;</code></pre><p>不同于在html中直接使用vue 在vue里不需要在new vue 了<br>只需  export 出结构即可 export里的 this也是当前vue文件形成的vue实例</p>]]>
    </content>
    <id>https://haotown.cn/archives/68.html</id>
    <link href="https://haotown.cn/archives/68.html"/>
    <published>2018-04-27T14:55:00.000Z</published>
    <summary>
      <![CDATA[<p>vue作为国产优秀开源项目已经火了很久 一直没太多时间去学习<br>首先 安装好node 配置好环境变量  这里我们直接使用官方的脚手架开发</p>
<pre><code>npm install vue-cli
</code></pre>
<p>等待进度 </p>
<pre]]>
    </summary>
    <title>VUE开发环境配置</title>
    <updated>2018-04-28T08:57:01.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <category term="心情" scheme="https://haotown.cn/category/%E5%BF%83%E6%83%85/"/>
    <content>
      <![CDATA[<p><img src="https://i.loli.net/2018/02/10/5a7f12cd70e3b.jpg" alt="img"></p><p>2017年不知不觉就过去了 我也结束了自己的校园及码农生活<br>准备为教育而献身 成为一名人民教师<br>想想也不知道对错 反正决定了就不能继续迷茫了 3月中旬就要参加考试<br>期待自己可以下次以一个教师的身份发表文章</p><p>这就是我闲暇时间完成的新主题 NEWCITY 2018<br>和知乎风格差不多<br>爱用不用（逃</p><p class="look" style="background-color: rgb(47, 44, 104);"><a href="https://github.com/haocity/newcity-2018-typecho" target="_blank">GITHUB</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/66.html</id>
    <link href="https://haotown.cn/archives/66.html"/>
    <published>2018-02-10T15:22:00.000Z</published>
    <summary>
      <![CDATA[<p><img src="https://i.loli.net/2018/02/10/5a7f12cd70e3b.jpg" alt="img"></p>
<p>2017年不知不觉就过去了 我也结束了自己的校园及码农生活<br>准备为教育而献身 成为一名人民教师<br>想想也不知道]]>
    </summary>
    <title>NEWCITY2018 简单的typecho主题</title>
    <updated>2018-02-10T15:49:49.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="软件" scheme="https://haotown.cn/category/%E8%BD%AF%E4%BB%B6/"/>
    <content>
      <![CDATA[<p>2.0以上版本使用webapp进行工作</p><p><img src="https://ws2.sinaimg.cn/large/a15b4afegy1fehqlefb7mj208c0eumy2" alt="1"><img src="https://ws2.sinaimg.cn/large/a15b4afegy1fehqlh0z14j208c0eu74r" alt="2"></p><p class="look" style="background-color: rgb(47, 44, 104);"><a href="https://github.com/haocity/oneimg-android" target="_blank">GITHUB</a></p><p class="look" style="background-color: rgb(67, 40, 204);"><a href="http://www.coolapk.com/apk/cn.haotowm.oneimg.client" target="_blank">下载客户端</a></p><blockquote><p>更新历史<br>3.1 重构web端 图床变更为腾讯云<br>3.0 加入第三方裁剪库 解决启动器不支持壁纸问题 加入多级菜单 取消滑动菜单<br>2.6 加入申请权限 解决android6已上储存权限问题<br>2.5 美化加载方式 评论系统更换为HCO<br>2.4.1 2017-4-11-19:30更新日志：适配安卓7.1 sdk25<br>2.4 2017-4-11-18:20 更新日志：评论模块修改修改顶部刷新触发条件<br>2.3 2017-4-10-22:20 增加顶部刷新 启用 minifyEnabled 减少体积<br>2.2 2017-4-10-18:20 加入权限防止FC</p></blockquote>]]>
    </content>
    <id>https://haotown.cn/archives/59.html</id>
    <link href="https://haotown.cn/archives/59.html"/>
    <published>2018-01-22T14:18:00.000Z</published>
    <summary>
      <![CDATA[<p>2.0以上版本使用webapp进行工作</p>
<p><img src="https://ws2.sinaimg.cn/large/a15b4afegy1fehqlefb7mj208c0eumy2" alt="1"><img src="https://ws2.sinaimg]]>
    </summary>
    <title>一图壁纸安卓版更新日志</title>
    <updated>2018-01-22T14:18:09.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>采用js进行互交操作 这里的HWebView大家当作Webview就行 我这里是继承的Webview改了点东西</p><pre><code data-language="JavaScript">final HWebView myWebView = (HWebView) findViewById(R.id.myWebView);WebSettings settings = myWebView.getSettings();settings.setJavaScriptEnabled(true);myWebView.addJavascriptInterface(new JsInteration(), "control");public class JsInteration &#123; @JavascriptInterface   public void toastMessage(String message) &#123;        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();    &#125;&#125;</code></pre><span id="more"></span><p>这样在webview里使用javascript</p><pre><code data-language="JavaScript"> function toastMessage(message) &#123;        window.control.toastMessage(message)&#125;toastMessage("hhhhhhhhhh")</code></pre><p>安卓函数toastMessage就会被调用<br>而安卓调用js则更为简单 直接loadUrl即可使用</p><pre><code>mWebView.loadUrl(&quot;javascript: toastMessage(&#39;hhhhhhhhhh&#39;)&quot;);</code></pre><p>如果要使用Web Storage则还要进行储存设置</p><pre><code>    settings.setAllowFileAccess(true);    settings.setDatabaseEnabled(true);    String dir = this.getApplicationContext().getDir(&quot;database&quot;, Context.MODE_PRIVATE).getPath();    settings.setDatabasePath(dir);    settings.setDomStorageEnabled(true);    settings.setGeolocationEnabled(true);</code></pre>]]>
    </content>
    <id>https://haotown.cn/archives/65.html</id>
    <link href="https://haotown.cn/archives/65.html"/>
    <published>2017-11-04T16:52:00.000Z</published>
    <summary>
      <![CDATA[<p>采用js进行互交操作 这里的HWebView大家当作Webview就行 我这里是继承的Webview改了点东西</p>
<pre><code data-language="JavaScript">
final HWebView myWebView = (HWebView) findViewById(R.id.myWebView);
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JsInteration(), "control");
public class JsInteration &#123;
 @JavascriptInterface
   public void toastMessage(String message) &#123;
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
    &#125;
&#125;
</code></pre>]]>
    </summary>
    <title>WEBAPP开发</title>
    <updated>2018-01-19T15:32:13.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>简单的H5音乐播放器</p><p>可直接播放网易云歌单</p><h3 id="食用方法"><a href="#食用方法" class="headerlink" title="食用方法"></a>食用方法</h3><p>引用hmusic.js</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;script  src=&quot;hmusic.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;</span><br></pre></td></tr></table></figure><p>播放云歌单</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">var hm= new Hmusic(document.querySelector(&#x27;.warp2&#x27;),&#123;playlist:150301862&#125;);</span><br></pre></td></tr></table></figure><p>Element:播放器所要放入的元素</p><p>playlist：网易云歌单ID</p><p>播放云音乐(多曲)</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">var hm= new Hmusic(document.querySelector(&#x27;.warp2&#x27;),[&#123;yunid: 4879869, img: &quot;https://p1.music.126.net/tciqmgtNlLSgmAA--w4iLw==/1664660604466892.jpg&quot;, lrc: &quot;https://t5.haotown.cn/yunmusic//?type=lyric&amp;id=4879869&amp;br=128000&quot;, title: &quot;チルノのパーフェクトさんすう教室-歌ってみた&quot;&#125;,&#123;yunid: 29717270, img: &quot;https://p1.music.126.net/oOGKq1fBwikj9IKsTM2TgQ==/3239161255894106.jpg&quot;, lrc: &quot;https://t5.haotown.cn/yunmusic//?type=lyric&amp;id=29717270&amp;br=128000&quot;, title: &quot;with“you”－絆－&quot;&#125;])</span><br></pre></td></tr></table></figure><p>Element:播放器所要放入的元素</p><p>Yunid：网易单曲ID</p><p>img：封面</p><p>title：标题</p><p>Yunid可用audio替换 将直接作为地址</p><h3 id="APIs"><a href="#APIs" class="headerlink" title="APIs"></a>APIs</h3><p>hm.play() 播放</p><p>hm.pause() 暂停</p><p>hm.playswitch() 切换播放状态 播放&#x2F;暂停</p><p>hm.settime()  跳转当前歌曲到指定时间</p><p>hm.to()       跳转到指定歌曲 0为第一首</p><p>hm.add()       添加音乐(单个) </p><p>hm.getnowmusic()  获取当前音乐信息</p><p class="look" style="background-color: rgb(247, 87, 87);"><a href="https://haocity.github.io/Hmusic.js/" target="_blank">演示</a></p><p class="look" style="background-color: rgb(101, 101, 101);"><a href="https://github.com/haocity/Hmusic.js" target="_blank">GITHUB</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/63.html</id>
    <link href="https://haotown.cn/archives/63.html"/>
    <published>2017-05-10T13:15:00.000Z</published>
    <summary>
      <![CDATA[<p>简单的H5音乐播放器</p>
<p>可直接播放网易云歌单</p>
<h3 id="食用方法"><a href="#食用方法" class="headerlink" title="食用方法"></a>食用方法</h3><p>引用hmusic.js</p>
<figure cl]]>
    </summary>
    <title>Hmusic.js</title>
    <updated>2018-01-19T15:25:52.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>请求地址<a href="https://app.haotown.cn/youku/api/">https://app.haotown.cn/youku/api/</a><br>请求参数 id   youki视频ID<br>例如<a href="http://v.youku.com/v_show/id_XMjc1Mzg4MjI2MA==.html">http://v.youku.com/v_show/id_XMjc1Mzg4MjI2MA==.html</a>  的ID为XMjc1Mzg4MjI2MA&#x3D;&#x3D;<br>请求请使用_end结尾(懒得判断了 用的正则)<br>高清的只能解析出来m3u8地址 就这样吧</p><p class="look" style="background-color: rgb(213, 60, 60);"><a href="https://t5.haotown.cn/youku/api/?id=XMjc1MzczOTg4OA==_end" target="_blank">测试API</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/62.html</id>
    <link href="https://haotown.cn/archives/62.html"/>
    <published>2017-05-09T09:28:00.000Z</published>
    <summary>
      <![CDATA[<p>请求地址<a href="https://app.haotown.cn/youku/api/">https://app.haotown.cn/youku/api/</a><br>请求参数 id   youki视频ID<br>例如<a href="http://v.youku]]>
    </summary>
    <title>优酷解析API</title>
    <updated>2018-01-19T15:10:08.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p><img src="https://i.loli.net/2017/08/17/59955eac32f69.png" alt="请输入图片描述"><br>替换掉老旧的flash播放器 使用基于tplayer的h5播放器<br>使用方法<br>    <p class="look" style="background-color: rgb(247, 87, 87);"><a href="https://app.haotown.cn/td/" target="_blank">安装插件</a></p></p><p>缩略图为K-YI画师创作 <a href="https://www.pixiv.net/member_illust.php?mode=medium&illust_id=64981314">link</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/61.html</id>
    <link href="https://haotown.cn/archives/61.html"/>
    <published>2017-04-20T11:08:00.000Z</published>
    <summary>
      <![CDATA[<p><img src="https://i.loli.net/2017/08/17/59955eac32f69.png" alt="请输入图片描述"><br>替换掉老旧的flash播放器 使用基于tplayer的h5播放器<br>使用方法<br>    <p class="lo]]>
    </summary>
    <title>TDPLAYER 脚本 替换ACFUN播放器</title>
    <updated>2018-02-27T10:24:37.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="软件" scheme="https://haotown.cn/category/%E8%BD%AF%E4%BB%B6/"/>
    <content>
      <![CDATA[<p><strong>弃坑万年的项目  终于写出来了</strong><br>查各种网站 终于实现了主要功能…<br>需求 安卓API19  4.4版本以上<br><img src="https://ws2.sinaimg.cn/large/a15b4afegy1feftb2nzk9j208c0c8t8v" alt="图片"></p><p class="look" style="background-color: rgb(162, 120, 177);"><a href="https://oneimg.haotown.cn/apk/oneimg-1.0.1.apk" target="_blank">下载客户端</a></p><p class="look" style="background-color: rgb(12, 280, 116);"><a href="https://github.com/haocity/oneimg-android" target="_blank">GITHUB</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/58.html</id>
    <link href="https://haotown.cn/archives/58.html"/>
    <published>2017-04-08T17:42:00.000Z</published>
    <summary>
      <![CDATA[<p><strong>弃坑万年的项目  终于写出来了</strong><br>查各种网站 终于实现了主要功能…<br>需求 安卓API19  4.4版本以上<br><img src="https://ws2.sinaimg.cn/large/a15b4afegy1feftb2nz]]>
    </summary>
    <title>一图安卓客户端发布</title>
    <updated>2017-04-11T00:28:41.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<h2 id="博客主题以同步github项目"><a href="#博客主题以同步github项目" class="headerlink" title="博客主题以同步github项目"></a>博客主题以同步github项目</h2><p>更新内容</p><ol><li>添加自定义导航</li><li>添加主题设置</li><li>分离各个JS 并设置开关<p class="look" style="background-color:rgb(89, 74, 204);"><a href="https://github.com/haocity/typecho-newcity" target="_blank" textvalue="Github">Github</a></p></li></ol>]]>
    </content>
    <id>https://haotown.cn/archives/56.html</id>
    <link href="https://haotown.cn/archives/56.html"/>
    <published>2017-03-30T07:29:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="博客主题以同步github项目"><a href="#博客主题以同步github项目" class="headerlink" title="博客主题以同步github项目"></a>博客主题以同步github项目</h2><p>更新内容</p>
<ol>
<li>]]>
    </summary>
    <title>NEWCITY1.7 更新</title>
    <updated>2017-04-17T11:52:17.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<h2 id="视频解析"><a href="#视频解析" class="headerlink" title="视频解析"></a>视频解析</h2><p>vid号 请求地址<a href="https://t5.haotown.cn/pyapi/vid/">https://t5.haotown.cn/pyapi/vid/</a><br>ac号(会跳转至首个vid)<a href="https://t5.haotown.cn/pyapi/vid/">https://t5.haotown.cn/pyapi/vid/</a></p><p class="look" style="background-color: rgb(212, 80, 116);"><a href="https://t5.haotown.cn/pyapi/vid/5378502" target="_blank">视频接口</a></p><h2 id="弹幕解析"><a href="#弹幕解析" class="headerlink" title="弹幕解析"></a>弹幕解析</h2><p>请求地址 <a href="https://app.haotown.cn/acfun/danmu/">https://app.haotown.cn/acfun/danmu/</a></p><table><tbody><tr><td>参数</td><td>类型</td><td>介绍</td></tr><tr><td>ac</td><td>Int</td><td>视频的AC号</td></tr><tr><td>vid</td><td>Int</td><td>视频的vid号</td></tr></tbody></table><p class="look" style="background-color: rgb(70, 197, 156);"><a href="http://app.haotown.cn/acfun/danmu/?ac=3575995" target="_blank" textvalue="弹幕测试">弹幕测试</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/55.html</id>
    <link href="https://haotown.cn/archives/55.html"/>
    <published>2017-03-28T11:59:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="视频解析"><a href="#视频解析" class="headerlink" title="视频解析"></a>视频解析</h2><p>vid号 请求地址<a href="https://t5.haotown.cn/pyapi/vid/">https://t5]]>
    </summary>
    <title>ACFUN视频解析和弹幕</title>
    <updated>2017-07-06T13:48:55.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="教程" scheme="https://haotown.cn/category/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<h2 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h2><p>php部分检测<strong>x-pjax</strong>头 存在即返回页面正文部分<br>滚动到底部时 发生ajax请求并附上<strong>x-pjax</strong>头 写入新标签做第二页</p><h4 id="前端部分"><a href="#前端部分" class="headerlink" title="前端部分"></a>前端部分</h4><ol><li>scroll事件 当页面滚动时触发</li><li>ajaxloading为true才可以进行加载（防止多次ajax）</li><li>判断当前地址是否为”&#x2F;“或者”&#x2F;page&#x2F;“及”&#x2F;category&#x2F;“这样的地址，是的话继续判断</li><li>判断是否存在下一页 存在的话进行页面滚动判断 是否到达页面底部 到达进行ajax请求 并将ajaxloading设为false 防止再次请求</li><li>显示加载动画并请求 成功则写入最后一个class为nextpage的标签 并移除当前换页栏 隐藏动画 ajaxloading设置为true<pre><code data-language="JavaScript"> var ajaxloading=true;  $(window).scroll(function() &#123;if (ajaxloading) &#123;  var pagedz = window.location.pathname;  if (pagedz == &quot;/&quot; || pagedz.indexOf(&#39;/page/&#39;) == 0||pagedz.indexOf(&#39;/category/&#39;)==0) &#123;    var url = $(&#39;.next:last&gt;a&#39;).attr(&#39;href&#39;);    if (url&amp;&amp;url!=document.location.href) &#123;      var scrollTop = $(this).scrollTop();      var scrollHeight = $(document).height();      var windowHeight = $(this).height();      if (parseInt(scrollTop + windowHeight)+2&gt;= scrollHeight) &#123;        ajaxloading=false;        $(&#39;.cssload-fond&#39;).show();        $.ajax(&#123;          url: url,          dataType: &#39;html&#39;,          timeout: 5000,          beforeSend: function(xhr) &#123;            xhr.setRequestHeader(&#39;X-PJAX&#39;, &#39;true&#39;)          &#125;,          success: function(data) &#123;            console.log(&#39;ok&#39;);            ajaxloading=true;            $(&#39;.nextpage:last&#39;).html(data);            var state = &#123;              title: document.title,              url: url,            &#125;;            window.history.pushState(null, document.title, url);            $(&#39;.page-navigator:first&#39;).remove();            $(&#39;.cssload-fond&#39;).hide();          &#125;,          error: function(data) &#123;            console.log(&quot;eero&quot; + data);            sendmessage(&#39;ajax失败&#39;);            $(&#39;.cssload-fond&#39;).hide();          &#125;        &#125;)      &#125;    &#125;  &#125;; &#125;;&#125;);</code></pre></li></ol>]]>
    </content>
    <id>https://haotown.cn/archives/52.html</id>
    <link href="https://haotown.cn/archives/52.html"/>
    <published>2017-03-14T01:26:00.000Z</published>
    <summary>
      <![CDATA[<h2 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h2><p>php部分检测<strong>x-pjax</strong>头 存在即返回页面正文部分<br>滚动到底部时 发生ajax请求并附上<stro]]>
    </summary>
    <title>网页滚动加载get!</title>
    <updated>2017-03-16T02:05:07.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="软件" scheme="https://haotown.cn/category/%E8%BD%AF%E4%BB%B6/"/>
    <content>
      <![CDATA[<p>弃坑老久的项目 现在又想折腾起来<br>趁着上课把客户端从新修改了下不知道这次能坚持多久。。</p><p class="look" style="background-color: rgb(86, 158, 179);"><a href="https://oneimg.haotown.cn/client.html" target="_blank" textvalue="客户端下载">客户端下载</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/51.html</id>
    <link href="https://haotown.cn/archives/51.html"/>
    <published>2017-03-06T07:30:00.000Z</published>
    <summary>
      <![CDATA[<p>弃坑老久的项目 现在又想折腾起来<br>趁着上课把客户端从新修改了下不知道这次能坚持多久。。</p>
<p class="look" style="background-color: rgb(86, 158, 179);"><a href="https://oneimg.h]]>
    </summary>
    <title>一图项目重新维护中。。。</title>
    <updated>2017-03-16T02:27:15.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>无聊的小东西 使用qr-image库编写</p><p>接受URL参数</p><p>地址 <a href="https://app.haotown.cn/qr/" target="_blank" textvalue="https://app.haotown.cn/qr/">https://app.haotown.cn/qr/</a></p><p class="look" style="background-color: rgb(70, 197, 156);"><a href="https://app.haotown.cn/qr/?url=https://app.haotown.cn" target="_blank" textvalue="接口测试">接口测试</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/50.html</id>
    <link href="https://haotown.cn/archives/50.html"/>
    <published>2017-02-22T07:30:00.000Z</published>
    <summary>
      <![CDATA[<p>无聊的小东西 使用qr-image库编写</p><p>接受URL参数</p><p>地址 <a href="https://app.haotown.cn/qr/" target="_blank" textvalue="https://app.haotown.cn/qr/">h]]>
    </summary>
    <title>qr二维码生成</title>
    <updated>2017-03-16T02:27:33.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://haotown.cn/category/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<p>    冒个泡 电脑炸了 过两天去修 暂时消失一阵子</p><p>    这个接口可以根据用户名称查询mid 接口用了简单暴力的方法 直接爬了前2kw的用户的mid 用户名等</p><p>    数据时间 2017-1-26日</p><p>    建议查询到mid后再通过哔站的mid接口查询用户信息确保实时性</p><p class="look" style="background-color: rgb(70, 197, 156);">    <a href="https://app.haotown.cn/bilibili/user/?user=疯狂减肥带" target="_blank" textvalue="接口测试">接口测试</a></p><p class="look" style="background-color: rgb(212, 80, 116);">    <a href="http://api.bilibili.com/cardrich?mid=7058853&type=json" target="_blank">哔站官方接口</a></p>]]>
    </content>
    <id>https://haotown.cn/archives/49.html</id>
    <link href="https://haotown.cn/archives/49.html"/>
    <published>2017-02-01T12:05:00.000Z</published>
    <summary>
      <![CDATA[<p>
    冒个泡 电脑炸了 过两天去修 暂时消失一阵子
</p>
<p>
    这个接口可以根据用户名称查询mid 接口用了简单暴力的方法 直接爬了前2kw的用户的mid 用户名等
</p>
<p>
    数据时间 2017-1-26日
</p>
<p>
    建议查]]>
    </summary>
    <title>bilibili用户查询接口</title>
    <updated>2017-03-16T02:27:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <category term="教程" scheme="https://haotown.cn/category/%E6%95%99%E7%A8%8B/"/>
    <content>
      <![CDATA[<p>请求地址 <a href="https://ip.haotown.cn/api/" target="_self" textvalue="https://ip.haotown.cn/api/">https://ip.haotown.cn/api/</a></p><p>请求方式 GET</p><p></p><table><tbody><tr class="firstRow" style="text-align: center;"><td width="192.66666666666666" valign="top" style="word-break: break-all;">参数<br/></td><td width="37.66666666666667" valign="top" style="word-break: break-all;">必要</td><td width="537" valign="top" style="word-break: break-all;">说明</td></tr><tr><td width="192.66666666666666" valign="top" style="word-break: break-all;">ip<br/></td><td width="37.66666666666667" valign="top" style="word-break: break-all;">X</td><td width="537" valign="top" style="word-break: break-all;">要定位的IP地址 不存在则为本机地址</td></tr><tr><td width="192.66666666666666" valign="top" style="word-break: break-all;">callback</td><td width="37.66666666666667" valign="top" style="word-break: break-all;">X</td><td width="537" valign="top" style="word-break: break-all;">回调函数 存在即返回jsonp 不存在返回json</td></tr><tr><td width="192.66666666666666" valign="top" style="word-break: break-all;">gpk</td><td width="37.66666666666667" valign="top" style="word-break: break-all;">X</td><td width="537" valign="top" style="word-break: break-all;">数据类型 留空为utf-8 存在即返回gpk</td></tr></tbody></table><p>返回的坐标为火星坐标（gcj02）</p><p></p><p>如想转换其他坐标可以</p><p class="look"><a href="https://github.com/wandergis/coordtransform" target="_self" >查看这里</a></p></p>]]>
    </content>
    <id>https://haotown.cn/archives/48.html</id>
    <link href="https://haotown.cn/archives/48.html"/>
    <published>2016-12-21T07:46:00.000Z</published>
    <summary>
      <![CDATA[<p>请求地址 <a href="https://ip.haotown.cn/api/" target="_self" textvalue="https://ip.haotown.cn/api/">https://ip.haotown.cn/api/</a></p><p>请求方式]]>
    </summary>
    <title>高精度IP地址查询</title>
    <updated>2017-03-19T05:40:50.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>haocity</name>
    </author>
    <category term="技术" scheme="https://haotown.cn/category/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p><img src="https://ooo.0o0.ooo/2016/12/16/585359df46d72.png"/>  &nbsp;本项目是一款基于css3和js弹幕系统</p><p>暂时还没有完成 正在努力完善中...</p><p>现已经添加node版弹幕库</p><p class="look" style="background-color: #e86fad;"><a href="https://haocity.github.io/Tplayer/">视频演示</a></p><p class="look" style="background-color: rgb(70, 197, 156);"><a href="https://github.com/haocity/Tplayer">Github</a></p><p><img src="https://ooo.0o0.ooo/2016/12/20/5858df24293f5.png"/></p>]]>
    </content>
    <id>https://haotown.cn/archives/42.html</id>
    <link href="https://haotown.cn/archives/42.html"/>
    <published>2016-12-20T05:45:00.000Z</published>
    <summary>
      <![CDATA[<p><img src="https://ooo.0o0.ooo/2016/12/16/585359df46d72.png"/> 
 &nbsp;本项目是一款基于css3和js弹幕系统</p><p>暂时还没有完成 正在努力完善中...</p><p>现已经添加node版弹幕库</p]]>
    </summary>
    <title>TPlayer简单的弹幕播放器</title>
    <updated>2017-03-16T02:27:25.000Z</updated>
  </entry>
</feed>
