您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
one button click -> simplify propertyguru listing info for easily copy / paste
// ==UserScript== // @name PropertyguruAssist // @namespace http://tampermonkey.net/ // @version 0.92 // @description one button click -> simplify propertyguru listing info for easily copy / paste // @author EnginePlus // @match https://*.propertyguru.com.sg/listing/* // @match https://*.commercialguru.com.sg/listing/* // @match https://*.propertyguru.com.my/property-listing/* // @grant none // @resource customCSS https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css // @require https://greasyfork.org/scripts/27254-clipboard-js/code/clipboardjs.js?version=174357 // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js // ==/UserScript== (function() { 'use strict'; function getValueByLabel(items, label) { // 查找 item,优先匹配 label(即 value),如果找不到则匹配 icon var item = items.find(item => item.label === label || item.icon === label); return item ? item.value : "N.A."; // 返回 value,找不到则返回 "N.A." } // 获取JSON数据内容 var url = window.location.href; var jsonData = JSON.parse(document.getElementById('__NEXT_DATA__').textContent); var propetyName = jsonData.props.pageProps.pageData.data.listingData.localizedTitle; //var propetyType = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Property Type"); var tenureType = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"calendar-days-o"); var topYear = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"document-with-lines-o"); var totalUnits = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"block-o"); //var listDate = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listed On"); //var listID = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Listing ID"); //var floorLevel = getValueByLabel(jsonData.props.pageProps.pageData.data.detailsData.metatable.items,"Floor Level"); var bedNum = jsonData.props.pageProps.pageData.data.listingData.bedrooms; var bathNum = jsonData.props.pageProps.pageData.data.listingData.bathrooms; var floorSize = jsonData.props.pageProps.pageData.data.listingData.floorArea; var price = jsonData.props.pageProps.pageData.data.propertyOverviewData.propertyInfo.price.amount; var agentName = jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.agentInfoProps.agent.name; var phoneNumber = jsonData.props.pageProps.pageData.data.listingData.agent.mobile; //jsonData.props.pageProps.pageData.data.contactAgentData.contactAgentCard.contactActions[1].phoneNumber; //alert(phoneNumber); var cleanPhoneNumber = phoneNumber.replace(/\D/g, ''); // 只保留数字 var clipboardText = url + '\t' + propetyName + ' [' + tenureType + ' / ' + topYear + ' / ' + totalUnits + '] ' + ', ' + bedNum + ' Bed, ' + bathNum + ' Bath, ' + floorSize + ' sqft, ' + price + '\t' + agentName + ' ' + phoneNumber; $(document).ready(function() { // 创建复制按钮 var copyButton = $('<button>', { text: " v0.91 | 点我复制 listing info ", style: "margin-left:3px;font-size:13px;background-color: #eeeee4", class: "btn" }).attr("data-clipboard-text", clipboardText); // 创建 WhatsApp 询问按钮 var formattedPhoneNumber = cleanPhoneNumber.replace(/^65(\d{4})(\d{4})$/, '+65 $1 $2'); //alert(formattedPhoneNumber); var sendText = 'Hi+' + agentName.replace(/ /g, '+') + '+I+am+interested+in+your+listing+' + url; var callLink = $('<a>', { href: "https://api.whatsapp.com/send?phone=" + cleanPhoneNumber + "&text=" + sendText, target: "_blank", style: "margin-left:5px;font-size:15px;" }).append( $('<img>', { src: "https://ibit.ly/iTu8B" }) // 先添加图片 ).append( ' ' + formattedPhoneNumber // 再添加电话号码(带空格,让它不贴着图片) ); // 将按钮插入 DOM $("h1").append('<p></p>').append(copyButton).append(callLink); // 确保 Clipboard.js 绑定成功 setTimeout(() => { new Clipboard('.btn'); }, 1000); }); })();