您需要先安装一个扩展,例如 篡改猴、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/bootstrap@4.4.1/dist/css/bootstrap.min.css
- // @require https://greasyfork.org/scripts/27254-clipboard-js/code/clipboardjs.js?version=174357
- // @require https://cdn.jsdelivr.net/npm/jquery@3.4.1/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);
- });
- })();