微信授權登錄提示code-2
appid和appsecret應該是移動應用,而非網頁應用
微信授權登錄提示code:-100
/自定義基座無法微信登錄和分享
開發者賬號配置的應用簽名應該是md5加密後的值,而不是原字符串
生產環境proxyTable不生效,導致接口500
兩種解決辦法:
①入口文件使用網絡地址,且和接口在同一域名下
②(推薦)
入口文件依舊是index.html
- 在
config/prod.env
和config/dev.env
下添加API_ROOT
'use strict'
module.exports = {
NODE_ENV: '"production"',
API_ROOT: '"http://cross.precision-wechat.com"'
}
- 在
main.js
裏設置baseUrl
axios.defaults.baseURL = process.env.API_ROOT
css內背景圖片使用相對路徑,打包測試不出現
修改config/index,js
內的這一行
// Paths
assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static',
assetsPublicPath: './',
import
進來的樣式表沒有被lib-flexible
轉爲rem
轉換寫法,改爲<style scoped src='../../assets/css/formReset.css'></style>
ApplePay沙盒測試登錄app store失敗
不能直接登錄app store,需要在點擊付款時登錄沙盒賬號
微博分享閃退
Dcloud的鍋,在授權失敗時授權層會閃現閃退,授權失敗有兩種情況,1網絡問題授權失敗2你沒安裝新浪微博,要再加一層判斷,如果授權失敗則進行提示。
plus.share.getServices(function(s){
s.forEach(function(item) {
if(item.id === 'sinaweibo') {
$this.shares = item;
}
});
if($this.shares.authenticated) {
// 已授權
$this.shares.send($this.sinashareMsg, function() {
plus.nativeUI.toast($this.langs.SHARE_SUCCESS);
}, function(e) {
plus.nativeUI.toast($this.langs.SHARE_FAIL);
})
}else {
// 未授權
$this.shares.authorize(function() {
$this.shares.send($this.sinashareMsg, function() {
plus.nativeUI.toast($this.langs.SHARE_SUCCESS);
}, function(e) {
plus.nativeUI.toast($this.langs.SHARE_FAIL);
})
}, function(e) {
// 授權失敗
plus.nativeUI.toast($this.langs.SHARE_FAIL);
})
}
}, function(e){
plus.nativeUI.toast(e.message);
});
IOS真機測試,el-input光標全滿,輸入時錯位
設置line-height=字體大小
iPhone X底部有個安全區,導致fixed+bottom的導航沒有保持在最底部
打包後在index.html`
<meta name="viewport" content="width=device-width,initial-scale=1.0">`的content里加一句`viewport-fit=cover`
使用plus.createWebview
創建webview
打開第三方鏈接出現的諸多問題
①在打開的連接中執行一段腳本
$this.payw.evalJS(script);
安卓測試無錯,iPhone不執行
解決:
將evalJS代碼放在loaded裏
$this.payw.addEventListener('loaded',function () {
$this.payw.evalJS(string);
});
②loaded內代碼執行了兩次,導致頁面跳轉兩次
Dcloud的鍋,解決辦法:
var isLoaded = false;
$this.payw.addEventListener('loaded',function () {
if(isLoaded){return true}
isLoaded=true;
$this.payw.evalJS(string);
});
③使用loading監聽頁面跳轉,跳轉到執行成功頁面即close當前webview,但IOS下監聽無效
Dcloud的鍋,loading中webview.getUrl
獲取的永遠是上一步的url,而不是當前頁面的真正url
一開始想更換loaded,後來發現在IOS上loaded有些webview只執行一次,有些則能每次跳轉都執行,不太穩定,最終決定使用progressChanged
解決方案:使用loaded來evalJS,progressChanged來對比地址
var isLoaded = false;
payw.addEventListener('loaded',function () {
if(isLoaded){return true}
isLoaded=true;
payw.evalJS(string);
})
payw.addEventListener('progressChanged',function () {
// 監聽是否成功
console.log(payw.getURL())
var callbacklink = payw.getURL().split('?')[0];
// if(callbacklink === successUrl) {
// plus.webview.close(payw)
// console.log('success');
// }
// if(callbacklink === failUrl) {
// // 支付失敗
// plus.webview.close(payw);
// console.log('fail');
// }
// if(callbacklink === cancelUrl) {
// plus.webview.close(payw)
// console.log('cancel');
// }
})
④progressChanged也會引發執行多次的問題
可以在判斷成功後remove掉事件
$this.fbsharew.addEventListener('progressChanged', handlePChange );
function handlePChange (e) {
if($this.fbsharew.getURL().split('?')[0] === finishlink) {
$this.fbsharew.removeEventListener('progressChanged', handlePChange );
}
}
處理安卓返回鍵,使返回時關閉所有webview
// 寫在mounted內
// 處理安卓返回鍵問題
plus.key.removeEventListener('backbutton', handleBack );
plus.key.addEventListener('backbutton', handleBack )
function handleBack() {
var wvs=plus.webview.all();
for(var i=0;i<wvs.length;i++){
if(wvs[i].getURL() !== plus.webview.currentWebview().getURL()) {
plus.webview.close(wvs[i]);
$this.switchUrl();// 判斷是後退還是回到其他頁面的方法
}
}
}
動態添加的HTML節點如何綁定事件
有這個需求是因爲有多語言版本,文本從後臺讀取。
比如
By creating your account, you agree to the Terms of Use and Privacy Policy of this site.
放在底部,點擊其他地方無反應,但點擊Terms of Use或者Privacy Policy則要出現條款浮層
解決辦法:
後臺添加語言僅修改文字,不要刪除標籤
<p>By creating your account, you agree to the<span data-id="0"> Terms of Use </span>and<span data-id="1"> Privacy Policy </span>of this site.</p>
這段html標籤寫爲:
<div class="terms" @click="popup($event)" v-html="langs.REGISTER_FOOTER"></div>
事件處理:
popup (event) {
let id = event.target.getAttribute('data-id')
if(id === '0') {
console.log('Terms of Use')
}
if(id === '1') {
console.log('Privacy Policy')
}
}
只有一個點擊範圍的可以直接使用<span>標籤,通過event.target.nodeName
來判斷